MVC 의 annotation 들
@Controller
@RestController
= @Controller + @ResponseBody
클래스의 모든 메서드가 @Responsbody를 필요로 할 때 사용하면 좋음
따라서 view를 반환해야 하는 메서드가 있을 경우는 Controller를 사용하는 것이 좋
@Controller 가 붙은 클래스에서 사용하는 URL Annotation
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@RequestMapping("/url")
Request가 들어왔을 때 받는 클래스를 표시한다
중복되는 URL를 단축
**URL ("/주소/redirect:/{정보}")
**정보: View name, redirect URL, tex, Java 객체
@ResponseBody
문자열을 그대로 웹에 띄울 때(JSON형태를 Response에 담을 때)
즉, return 하는 값 그 자체를 Response 객체에 담아서 보내겠다고 표시하는 것
@PathVariable
주소에 담겨온 데이터를 빼낼 때 사용
데이터를 사용할 메서드의 매개변수 타입 왼쪽에 적는다
@ PathVariable (required = false)
입력값이 없을 때 오류가 발생하지 않도록 해 줌(대신null로 들어옴)
직접 적지 않으면 기본값이 true 이므로 오류 발생
@RequestParam
Query String 방식으로 주소창/form태그 에 담겨 온 데이터를 빼낼 때 사용
데이터를 사용할 메서드의 매개변수 타입 왼쪽에 적는다
**주소창으로 오는 것은 GetMapping 방식, form태그로 오는 것은 PostMapping 방식
**form 태그에 담겨 온 데이터는 자동변환을 거쳐 Param 방식으로 들어온다. 이를 받는 것
**Param 방식 예 : name=abc&age=123
@RequestParam(required = false)
입력값이 없을 때 오류가 발생하지 않도록 해 줌(대신null로 들어옴)
직접 적지 않으면 기본값이 true 이므로 오류 발생
@RequestParam 를 생략해도 사용됨
@ModelAttribute
Body 에 들어온 Query String 방식의 데이터를 추출,변환하여 객체에 담아서 가져옴
가져온 데이터를 사용할 메서드의 매개변수의 왼쪽에 붙여줌
@PostMapping이나 @GetMapping 에서 모두 사용 가능하나 보통 @PostMapping에서 사용하며
@GetMapping 에서 @RequestParam 으로 받기에는 데이터의 종류/개수가 많은 경우 유용(드물지만 그렇게 사용함)
Setter 또는 오버로딩된 생성자가 반드시 있어야 받아옴
@ModelAttribute를 생략해도 사용됨
** @RequestParam @ModelAttribute 둘 다 생략이 가능한데
만약 둘 다 생략된 상태라면?
생략된 둘 중 뭘 사용할지 스프링이 판단하는 기준
받아올 데이터가(매개변수 타입이) Simple Value 타입이라면 @RequestParam 을, 아니라면(Object라면) @ModelAttribute 을 사용함
@RequestBody
HTTP body 부분에 Json 형식으로 데이터가 넘어오는 상황에
이 데이터를 처리하기 위해서는 가져온 데이터를 사용할 메서드의 매개변수의 타입의 왼쪽에 붙여줌
Jackson 라이브러리 적용후 사용
Jackson 라이브러리
Object 를 Json 타입으로 변환해줌
**JSON - Java Script 와 비슷한 데이터 형식
제공하는 클래스인
ObjectMapper
의 메서드
.writeValueAsString() 변환하고 싶은 객체를 넣으면 String 타입으로 반환해 줌 (직렬화)
이 때, 객체는 Getter가 있어야 함 >> @Getter 달아놓기
.readValue(json, Star.class)
Json 형태의 객체를 Star 형태로 바꿔줌
이 때, 변환될 객체는 getter or Setter나 기본생성자를 가지고 있어야함
또한 Json 문자열 내 이름과 Star 객체의 멤버변수이름이 동일해야함