5 2. 서비스 요청과 응답
hanmj edited this page 7 months ago

서비스 요청

서비스 메소드는 파라미터가 많지 않거나 자주 변하지 않으면 해당 파라미터들을 직접 정의한다.

public List<?> getXXXInfo(String param0, String param1, int param2) {
    ...
}

파라미터가 많거나 자주 변하면 ServiceRequest를 상속하는 value object를 정의하여 파라미터로 사용한다.

public class BusinessRequest extends ServiceRequest {
    private String
        param0,
        param1;
    private int param2;
    ...
}

public List<?> getXXXInfo(BusinessRequest req) {
    ...
}

xit-foundation은 정보조회를 위한 ServiceRequest인 QueryRequest를 제공한다. QueryRequest는

  • 조회 공통조건
  • 페이징 관련 파라미터
  • 다운로드 여부

등을 정의하고 있다.

위 예를 다시 쓰면

public class BusinessRequest extends QueryRequest {
    private String
        param0,
        param1;
    private int param2;
    ...
}

public List<?> getXXXInfo(BusinessRequest req) {
    ...
}

서비스 응답

서비스 응답은 콘트롤러가 ModelAndView로 한다.

JSP

응답을 JSP로 할 경우

  • 해당 페이지의 경로(WEB-INF/jsp 아래의)를 ModelAndView의 뷰이름으로 설정하고
  • 결과 정보를 ModelAndView에 추가한다.
예) Object result = ...; // 서비스 응답 결과 정보
    return new ModelAndView("service/req-result") // <- WEB-INF/jsp/service/req-result.jsp
    .addObject("result", result);

jsonView

응답을 JSON으로 할 경우

  • 'jsonView'를 ModelAndView의 뷰이름으로 설정하고
  • 결과 정보를 ModelAndView에 추가한다.
예) Object result = ...; // 서비스 응답 결과 정보
    return new ModelAndView("jsonView")
    .addObject("result", result);

파일 다운로드

서비스 처리 결과로 파일을 다운로드할 경우

  • 'downloadView'로 전달하거나
  • download(Downloadable, HttpServletResponse)를 호출한다.

downloadView

  • 'downloadView'를 ModelAndView의 뷰이름으로 설정하고
  • 파일이나 InputStream으로 Downloadable을 생성한다.
  • 생성한 downloadable을 'download'라는 이름으로 ModelAndView에 추가한다.

파일일 경우

예) File file = ...;
    return new ModelAndView("downloadView")
        .addObject("download", Downloadable.create(file));

InputStream일 경우

예) InputStream inputStream = ...;
    return new ModelAndView("downloadView")
        .addObject(
            "download",
            Downloadable
                .create(inputStream)
                .setFilename("파일이름")
                .setContentType("...") // 필요할 경우
        );

download(...) 메소드

  • Downloadable을 생성 후 download(Downloadable, HttpServletResponse)를 실행한다. 파일일 경우
예) download(Downloadable.create(file), hresp);

InputStream일 경우

예) InputStream inputStream = ...;
    download(
        Downloadable
            .create(inputStream)
            .setFilename("파일이름")
            .setContentType("..."), // 필요할 경우
        hresp
    );