Spring 어노테이션 정리

2023. 12. 29. 17:43
728x90

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) {
}

 

728x90

BELATED ARTICLES

more