티스토리 뷰

 

0. 개요

- Nexacro client에서 보내는 요청을 처리하는 컨트롤러 메서드는 요청에 사용하는 데이터셋의 유형에 맞게 
  어노테이션을 선언한 파라미터를 정의하여 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 

 

 

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…) 형태로 변환하여 파라미터로 받음

 

'분리수거 대기중' 카테고리의 다른 글

Java Script: 정규 표현식을 이용한 공백 제거  (0) 2019.05.15
Agile process  (0) 2019.05.09
SLF4J logging  (0) 2019.05.08
JSP 주소 호출 방법  (0) 2019.05.08
POJO(Plain Old Java Object)  (0) 2019.04.03
댓글