SPRING Annotation(1) 포스트를 이어서 Annotation을 정리하려고 한다.
주요 Annotation(2)
@RequestMapping
- 요청 URL을 어떤 method가 처리할지 mapping해주는 어노테이션이다.
- 요청받는 형식인 GET, POST, PATCH, PUT, DELETE를 정의하기도 한다.
@GetMapping
- RequestMapping(Method=RequestMethod.GET)와 같은 것으로 GET요청 방식으로 제공되는 어노테이션이다.
@PostMapping
- RequestMapping(Method=RequestMethod.POST)와 같은 것으로 POST방식으로 제공되는 어노테이션이다.
@PutMapping
- RequestMapping(Method=RequestMethod.PUT)와 같은 것으로 PUT 요청 방식으로 제공되는 어노테이션이다.
@DeleteMapping
- RequestMapping(Method=RequestMethod.DELETE)와 같은 것으로 DELETE요청 방식으로 제공되는 어노테이션이다.
@PathVariable
- method parameter앞에 사용하면서 해당 URL에서 {특정값}을 변수로 받아올 수 있다.
- 하나의 값을 받아오는 어노테이션이며, HTTP 요청에 대해 매핑되는 request parameter값이 자동으로 Binding된다.
- URI에서 각 구분자에 들어오는 값을 처리해야할때 사용한다.
@RequestParam
- HttpServletRequest 객체와 같은 역할을 하며 메소드의 매개변수 값으로 매개변수에 담긴 value값을 받아오게 된다.
- 즉, URL 뒤에 붙은 매개변수 값을 가져올 때 사용한다.
- 여러개의 값을 가져올 수 있다.
@RequestBody
- 이 어노테이션이 붙은 매개변수에는 http 요청의 본문(body)이 그대로 전달된다.
- 일반적인 GET/POST 의 요청 매개변수라면 @RequestBody를 사용할 일이 없을 것이고 반면에 XML이나 JSON기반의 메시지를 사용하는 요청의 경우에 이 방법이 매우 유용하다.
@RequestMapping("/model_ requestBody")
public String ajaxTest(@RequestBody DataDto dataDto) throws Exception {
return dataDto.getContent();
}
@ModelAttribute
- @RequestBody와 마찬가지로 클라이언트 측에서 보낸 데이터를 JAVA 코드에서 사용할 수 있는 객체로 만들어주는(Java Object Binding) 공통점이 있다.
- 요청 파라미터를 받아서 필요한 객체를 만들고 그 객체에 값을 넣어줘야하는데 이 @ModelAttribute를 사용하면 자동으로 객체를 만들어준다.
@ResponseBody
@RequestMapping("/model_Attribute")
public String ModelModelAttribute(@ModelAttribute DataDto dataDto) {
log.info("title={}, content={}", dataDto.getTitle(), dataDto.getContent());
log.info("DataDto={}", dataDto);
return "ok";
}
@ResponseBody
- HttpMessageConverter를 이용하여 JSON 혹은 XML로 요청에 응답할 수 있게 해주는 어노테이션이다.
- View가 아닌 JSON 형식의 값을 응답할 때 사용하는 어노테이션으로 문자열을 리턴하면 그 값을 http response header가 아닌 response body에 들어간다.
- RestController을 쓴다면 쓸 필요가 없다. 그렇지 않을 경우만 이 어노테이션을 추가시 httpresponse로 응답할 수 있게 해준다.
@Data
public class DataDto {
private String title;
private String content;
}
@ResponseBody
@RequestMapping("/model_ResponseBody")
public DataDto ModelRequestBody(@RequestParam String title, @RequestParam String content) {
DataDto dataDto= new DataDto ();
dataDto.setTitle(title);
dataDto.setContent(content);
log.info("title={}, content={}", dataDto.getTitle(), dataDto.getContent());
log.info("DataDto={}", dataDto);
return dataDto;
}