Spring 어노테이션 정리
1. Bean 자동 등록에 사용하는 어노테이션
1) @Repository
- Data Access Layer의 클래스에 사용.
- DAO(Data Access Object) 또는 Repository 클래스에 사용.
2) @Service
- Service Layer의 클래스에 사용
3) @Controller
- Presentation Layer의 MVC Controller에 사용.
- 스프링 웹 서블릿에 의해 웹 요청을 처리하는 컨트롤러 빈으로 선정.
4) @Component
- 위의 Layer 구분이 어려운 경우에 설정.
2. Controller 관련 어노테이션
@Controller
- Spring의 컨트롤러를 의미
@RestController
- Spring의 컨트롤러 중 View로 응답하지 않는 컨트롤러를 의미.
- 반환 결과를 JSON 형태로 반환.
- 이 어노테이션이 적혀있는 컨트롤러의 메서드는 HttpResponse로 바로 응답 가능.
- @ResponseBody 역할을 자동적으로 해줌. (즉, @RestController = @Controller + @ResponseBody)
@ResponseBody
- HttpMessageConverter를 이용하여 JSON 혹은 xml로 요청에 응답할 수 있게 해주는 어노테이션.
- view가 아닌 JSON 형식의 값을 응답할때 사용.
- 문자열을 리턴하면 http response header가 아니라, response body에 들어간다. (@RestController에는 필요없음)
- context에 설정된 viewResolver를 무시한다고 보면 됨.
@RequestMapping
- Http 요청과의 맵핑을 위해 클래스나 메서드에서 사용.
- 요청받는 형식을 저장하지 않는다면 자동적으로 GET으로 설정.
- @GetMapping, PostMapping, PutMapping, DeleteMapping, PatchMapping
= @RequestMapping(value = "/", method=RequestMethod.GET)
1) 지정 가능한 속성
value | 요청 경로 지정. |
path | value 속성의 별명을 지정 |
method | HTTP 메서드 값 (GET, POST, PUT 등) 지정 |
params | 요청 파라미터 유무나 파라미터 값 저장 - name: 지정한 파라미터가 존재하는 경우에 매핑 대상이 된다. - !name: 지정 파라미터가 존재하지 않는 경우 매핑 대상 - name = value : 파라미터 값이 지정한 값에 해당하는 경우 매핑 대상 - name = !value : 파라미터 값이 지정한 값에 해당하지 않는 경우 매핑 대상. |
headers | 헤더 유무나 헤더 값 지정 - headers 속성에서 지원하는 지정 형식은 params 속성과 같음. |
consumes | Content-Type 헤더 값(미디어 타입)을 지정 - mediaType : 미디어 타입이 지정한 값인 경우 매핑 대상 - !mediaType : 미디어 타입이 지정한 값이 아닌 경우 매핑 대상. |
produces | Accept 헤더 값(미디어 타입)을 지정 - 형식은 consumes와 같다. |
name | 매핑 정보에 임의의 이름을 지정. |
<인자에 붙이는 어노테이션>
@ModelAttribute
- view에서 전달해주는 파라미터 값을 클래스(DTO)의 멤버 변수로 바인딩해주는 어노테이션.
- 바인딩 기준은 뷰에서 어떤 태그의 name값이 해당 클래스의 멤버변수명과 일치해야 하고 setMethod명도 일치해야 한다.
class Person {
String id;
public void setId(String id) {
this.id = id;
}
public String getId() {
return this.id;
}
}
@Controller
@RequestMapping("/")
public class PersonController {
@RequestMapping(value = "/info", method = RequestMethod.GET)
public void findById (@ModelAttribute("id") Person person, Model model) {
model.addAttribute(service.read(person.getId());
}
}
//ex. html파일에서
<input name = "id" />
@PathVariable
- @RequestMapping의 path에 변수명을 입력받기 위한 placeholder가 필요하다. (={id})
- placeholde 이름 = PathVariable의 이름 같으면 맵핑된다.
- required 속성은 기본값이 true임.
@RequestMapping(value = "/some/path/{id}", method= RequestMethod.GET)
public ResponseEntity<?> someMethod (@PathVariable int id) {
}
@RequestParam
- 맵핑된 메서드의 인자에 붙임. @PathVariable과 비슷.
-request의 파라미터에서 가져온다.
- name : http parameter의 name과 맵핑.
- required : 필수인지 아닌지 판단.
ex. http://localhost:8080/test?index=1&page=2 >> 이 http 파라미터를 받아온다.
@GetMapping("/home")
public String show (@RequestParam("page") int pageNum) {
}
@RequestBody
- 요청이 온 데이터(JSON이나 XML형식)를 바로 클래스나 모델로 매핑.
- POST, PUT, PATCH로 요청을 받을 때, 요청에서 넘어온 body 값들을 자바 타입으로 파싱해줌.
- RequestData를 바로 Model이나 클래스로 매핑
@PostMapping("/book")
public ResponseEntity<?> someMethod (@RequestBody Book book) {
}
'Programming > Spring, SpringBoot' 카테고리의 다른 글
Spring MVC & Thymeleaf (4) | 2024.01.03 |
---|---|
스프링부트 기초 (0) | 2024.01.03 |
[타임리프 에러] Property or field ' ' cannot be found on object of type 'java.util.ArrayList' - maybe not public or not valid? (1) | 2023.12.29 |
thymleaf 설정 시 yml 파일 (0) | 2023.12.28 |
사용중인 포트 확인 및 강제 종료 명령어 (0) | 2023.12.26 |