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
);