0. 개요
Nexacro client에서 보내는 요청을 처리하는 컨트롤러 메서드는 요청에 사용하는 데이터셋의 유형에 맞게 annotation을 선언한 parameter를 정의하여 client에서 전송한 데이터를 사용할 수 있다.
client에서 전송하는 요청의 유형에 따라 처리하는 방법은 아래와 같이 구별할 수 있다.
1) 파라미터가 없는 경우
2) 하나의 값(Row)만 존재하는 데이터셋을 파라미터로 받는 경우
3) 여러 값(Row)를 가지는 데이터셋을 파라미터로 받는경우
4) 추가/수정/삭제 요청을 하나의 요청에서 받는 경우
1. 요청 처리
1) 파라미터가 없는 경우
예) ResearchPlanningController.java
...
@RequestMapping("/ss1pl0002r.do")
public NexacroResult retrieveAllResearchPlanning() {
//
List<ResearchPlanningDTO> researchPlannings = researchPlanningProcService.retrieveAllResearchPlanning();
NexacroResult result = new NexacroResult();
result.addDataSet("DS_researchPlanning", researchPlannings);
return result;
}
...
Nexacro client에서 보낸 파라미터가 없는 요청을 처리하는 controller의 메서드는 파라미터없이 정의 가능
2) 하나의 값(Row)만 존재하는 데이터셋을 파라미터로 받는 경우
예) ResearchPlanningController.java
import com.nexacro.uiadapter17.spring.core.annotation.ParamDataSet;
...
@RequestMapping("/ss1pl0001i.do")
public NexacroResult createResearchPlanning(
@ParamDataSet(name = "DS_researchPlanning") ResearchPlanningDTO requestDTO) {
//
researchPlanningProcService.createResearchPlanning(requestDTO);
return new NexacroResult();
}
...
하나의 DataSet을 파라미터로 받을 경우 client가 보낸 DataSet을 변환할 DTO를 파라미터로 기술하고,
파라미터 앞에 @ParamDataSet 어노테이션을 선언하고 name 속성에 DataSet의 이름을 기술
3) 여러 값(Row)를 가지는 데이터셋을 파라미터로 받는경우
예) TestController.java
import com.nexacro.uiadapter17.spring.core.annotation.ParamDataSet;
...
@RequestMapping("/ss1pl1111u.do")
public NexacroResult test4(
@ParamDataSet(name = "DS_test1") List<TypeTestDTO> testDTOs) {
//
for (TypeTestDTO dto : testDTOs) {
log.debug("############################");
log.debug("dto : {}", dto);
}
return new NexacroResult();
}
...
여러 값(Row)를 가지는 DataSet을 파라미터로 받을 경우, 파라미터에 DTO 리스트를 기술하고
그 앞에 @ParamDataSet을 적고, name 속성에 DataSet의 이름을 지정
4) 추가/수정/삭제 요청을 하나의 요청에서 받는 경우
예) ResearchPlanningController.java
import kr.amc.amil.nexacro.annotation.CudListsParam;
...
@RequestMapping("/ss1pl0103t.do")
public NexacroResult processResearchPlannings(
@CudListsParam(name = "DS_researchProject") CudLists<ResearchProjectDTO> cudLists) {
//
researchProjectProcService.processResearchProjectList(cudLists);
return new NexacroResult();
}
...
Nexacro의 그리드에서 추가, 수정, 삭제를 한꺼번에 처리를 요청하는 경우, 파라미터에 CUDLists를 사용하며
그 앞에 @CudListsParam을 적고, name 속성에 DataSet의 이름을 지정함
화면의 그리드에서 추가, 수정, 삭제한 Row의 정보로 CudLists로 변환이 되고, 추가, 수정, 삭제한 Row에
해당하는 DTO를 가지는 3개의 리스트를 사용할 수 있음 (listForCreation, listForDelete, listForUpdate)
CudList 객체를 파라미터로 서비스를 요청하여 처리하면 됨
- null 파라미터 허용 옵션
- DTO(DataSet)값이 null로도 전송할 수 있다면, Nexacro 파라미터 관련 어노테이션의 required 속성을 false로 정의
//예시 @ParamDataSet(name=“DS_researchPlanning”, required=false) ResearchPlanningDTO requestDTO @ParamDataSet(name=“DS_test1”, required=false) List testDTOs @CudListsParam(name=“DS_researchProject”, required=false) CudLists cudLists
- DTO(DataSet)값이 null로도 전송할 수 있다면, Nexacro 파라미터 관련 어노테이션의 required 속성을 false로 정의
2. 응답 처리
1) 결과 없이 응답
예) ResearchPlanningController.java
@RequestMapping("/ss1pl0001i.do")
public NexacroResult createResearchPlanning(
@ParamDataSet(name = "DS_researchPlanning") ResearchPlanningDTO requestDTO) {
//
researchPlanningProcService.createResearchPlanning(requestDTO);
return new NexacroResult();
}
결과없이 응답하는 경우 인자가 없는 생성자를 호출하여 생성한 NexacroResult 객체를 리턴
2) 하나의 DTO로 응답
예) ResearchPlanningController.java
@RequestMapping("/ss1pl0003r.do")
public NexacroResult retrieveResearchPlanning(
@ParamDataSet(name = "DS_researchPlanning", required = false) ResearchPlanningDTO requestDTO) {
//
log.debug("requestDTO {}", requestDTO);
ResearchPlanningDTO researchPlanningDTO = researchPlanningProcService.retrieveResearchPlanning(requestDTO.getName());
NexacroResult result = new NexacroResult();
result.addDataSet("DS_researchPlanning", researchPlanningDTO);
return result;
}
NexacroResult 객체를 생성한 후 addDataSet 메소드를 통해 DataSet 이름과, DTO를 세팅한 후 리턴
3) 다건의 DTO로 응답
예) ResearchPlanningController.java
@RequestMapping("/retrieveAllResearchPlannings.do")
public NexacroResult retrieveAllResearchPlanning() {
//
List<ResearchPlanningDTO> researchPlannings = researchPlanningProcService.retrieveAllResearchPlanning();
NexacroResult result = new NexacroResult();
result.addDataSet("DS_researchPlanning", researchPlannings);
return result;
}
NexacroResult 객체를 생성한 후 addDataSet 메소드를 통해 DataSet 이름과 DTO 리스트를 세팅한 후 리턴
4) paging으로 응답
예) ResearchPlanningController.java
@RequestMapping("/ss1pl0001r.do")
public NexacroResult retrieveResearchPlanningPagedList(
@ParamDataSet(name = "DS_researchPlanningRequest") ResearchPlanningDTO requestDTO) {
//
log.debug("requestDTO {}", requestDTO);
Paging<ResearchPlanningDTO> researchPlanningPaging = researchPlanningProcService.retrieveResearchPlanningPagedList(requestDTO);
NexacroResult result = new NexacroResult();
result.addDataSet("DS_researchPlanning", researchPlanningPaging.getItemList());
result.addDataSet("DS_researchPlanningPaging", PagingInfo.newInstance(researchPlanningPaging));
return result;
}
NexacroResult 객체를 생성한 후 addDataSet 메소드를 두 번 호출하여 아래 값들을 설정한 후 리턴
DataSet 이름과 아이템 목록(Paging객체의 getItemList() 메소드 호출) 세팅
DataSet 이름과 페이징 정보(PagingInfo 클래스의 newInstance() 메소드로 생성) 세팅
3. nexacro가 아닌 요청에 대한 대응 controller
예)
@Slf4j
@Controller
@RequestMapping("/nn")
public class ResearchPlanningJspController {
//
@Autowired
private ResearchPlanningProcService researchPlanningProcService;
@Autowired
private ResearchPlanningShareService researchPlanningShareService;
@Autowired
private Configuration configuration;
@RequestMapping("/ss1pl1001i.do")
@ResponseBody
public AbstractDTO createResearchPlanning(@RequestBody ResearchPlanningDTO dto) {
//
int createCount = researchPlanningProcService.createResearchPlanning(dto);
log.debug("createdCount {}", createCount);
return new AbstractDTO() {};
}
@RequestMapping("/ss1pl1002r.do")
@ResponseBody
public ResearchPlanningDTO retrieveResearchPlanning(@RequestBody String name) {
//
ResearchPlanningDTO researchPlanningDTO = researchPlanningProcService.retrieveResearchPlanning(name);
log.debug("retrieve {}", name);
return researchPlanningDTO;
}
@RequestMapping("/ss1pl1001u.do")
@ResponseBody
public AbstractDTO updateResearchPlanning(@RequestBody ResearchPlanningDTO researchPlanningDTO) {
//
int updateCount = researchPlanningProcService.updateResearchPlanning(researchPlanningDTO);
log.debug("update {}", updateCount);
return new AbstractDTO() {};
}
@RequestMapping("/ss1pl1001d.do")
@ResponseBody
public AbstractDTO deleteResearchPlanning(@RequestBody ResearchPlanningDTO researchPlanningDTO) {
//
log.debug("delete {}", researchPlanningDTO);
return new AbstractDTO() {};
1) @RequestMapping
- 요청을 받을 api를 @RequestMapping(“값”)으로 지정.
- 위와 같은 경우에는 클래스에 @RequestMapping(“/nn”)가 있고,
각 메서드에 @RequestMapping(“ss1pl1002r.do”) 라고 작성하게 되면,
http://"URL"/"ContextPath"/nn/ss1pl1002r.do 형태의 api로 요청을 받음
2) @ResponseBody: 요청을 받은 서비스( Method ) 의 리턴값을 응답
3) @RequestBody
- Body에 값을 요청
- JSON형식의 데이터를 Java Object(String, XxDTO, PrimitiveType, WrapperClass…) 형태로 변환하여 파라미터로 받음
'Nexacro' 카테고리의 다른 글
자바에서 넘어온 변수 받는 법 (0) | 2024.03.21 |
---|---|
[넥사크로][기본] 04. 화면실습_데이터 바인드 (0) | 2024.03.20 |
[넥사크로][기본] 03. 넥사크로 컴포넌트 (0) | 2024.03.20 |
[넥사크로][기본] 02. 개발환경 설정과 Hello 띄우기 (0) | 2024.03.20 |
[넥사크로][기본] 01. 넥사크로플랫폼 개요 (0) | 2024.03.20 |