@Controller

Posted by 단순대왕 Spring/Annotation : 2016. 1. 15. 15:04

1. 메소드 파라미터의 종류

- HttpServletRequest, HttpServletResponse

- HttpSession (멀티쓰레드 환경에서 안정성 보장 안됨. 안정성 보장을 위해서는 핸들러 어댑터의 synchroizeOnSession = true 설정)

- WebRequest, NativeWebRequest

- Locale: Locale Resolver가 결정한 Locale 오브젝트

- InputStream, Reader

- OutputStream, Writer

- @PathVariable: @RequestMappint의 URL에 {}로 들어가는 패스 변수

- @RequestParam: 단일 HTTP 요청 파라미터를 메소드 파라미터에 넣어주는 애노테이션

public void view(@RequestParam(value="id", required=false, defaultValue="-1") int id){ ... }

- @CookieValue

public String check(@CookieValue(value="auth", required=false, defaultValue="NONE") String auth){ ... }

- @RequestHeader

- Map, Model, ModelMap

- @ModelAttribute: 모델 맵에 담겨서 뷰에 전달되는 모델 오브젝트의 한가지. 기본적으로 모든 @ModelAttribute는 별도의 설정 없이도 자동으로 뷰에 전달.

@ModelAttribute 가 붙은 파라미터는 검증 작업을 추가로 진행한다.

@RequestMapping("/user/search")

public String search(@ModelAttribute UserSearch userSearch){

List<User> list = userService.search(userSearch);

model.addAttribute("userList", list);

}

- Errors, BindingResult

- SessionStatus: 모델 오브젝트를 세션에 저장했다가 다음 페이지에서 사용하는 경우, 작업 완료 후 세션에 저장된 오브젝트 제거

- @RequestBody: HTTP 요청의 본문(body) 부분을 전달

XML-MarshallingHttpMessageConverter/ JSON-MappingJacksonHttpMessageConverter 사용

- @Value

public String hello(@Value("#{systemProperties['os.name']}") String osName){ ... }

- @Valid: JSP-303 빈 검증기를 이용해서 모델 오브젝트를 검증하도록 지시하는 지시자


2. 리턴 타입의 종류

- 자동 추가 모델 오브젝트: @ModelAttribute 모델 오브젝트, Map, Model, ModelMap 파라미터, @ModelAttribute 메소드, BindingResult

- @ModelAttribute 메소드: 메소드가 생성하는 오브젝트는 클래스 내의 다른 컨트롤러의 메소드의 모델에 자동 추가

@ModelAttribute("codes") - <select> 옵션 등에 사용되는 값을 전달.

public List<Code> codes(){

return codeService.getAllCodes();

}

- BindingResult: org.springframework.validation.BindingResult.모델이름

- ModelAndView

- String

- 모델 오브젝트: 모델에 추가할 오브젝트가 하나뿐이라면 모델 오브젝트를 바로 리턴

- Map/ Model/ ModelMap

- View: @Autowired MarshallingView userXmlView;

- @ResponseBody

@RequestMapping("/hello")

@ResponseBody

public String hello(){

return "<html><body>Hello Spring</body></html>";

}


3. @SessionAttributes와 SessionStatus

- 컨트롤러 메소드가 생성하는 모델정보 중에서 @SessionAttribute에 지정한 이름과 동일한 것이 있다면 세션에 저장

@SessionAttribute는 @ModelAttribute가 지정된 파라미터가 있을 때 이 파라미터에 전달해줄 오브젝트를 세션에서 가져온 후, 

폼에서 전송해준 파라미터만 바인딩한 뒤에 컨트롤러의 파라미터로 넘겨준다.

@SessionAttribute를 사용할 때는 더 이상 필요 없는 세션 애트리뷰트를 코드로 제거해줘야 한다.

sessionStatus.setComplete();



'Spring > Annotation' 카테고리의 다른 글

@InitBinder  (0) 2016.01.15
@Controller + @ModelAttribute + ModelBinding  (0) 2016.01.15
@Transactional  (0) 2016.01.13