1. Response
@Controller
public class PageController {
@RequestMapping("/main")
public String main(){
return "main.html";
}
@ResponseBody
// ResponseBody를 내려서 resource를 찾지 않고 response를 만들겠다는 어노테이션
// HttpMessageConverter를 통해서 응답 값을 자동으로 json으로 직렬화 한 뒤 응답해주는 역할
// REST API CONTROLLER를 따로 만든다면 거기에는 responseBody 어노테이션 안붙여도 되지만
// 그 외 Controller에서는 명시하는게 맞다
// cf) ResponseEntity : HTTP 상태 코드를 전송하고 싶은 데이터와 함께 전송
@GetMapping("/user")
public User user(){
var user = new User("YOONSEOK", 11, "01011111111");
return user;
}
}
참조)
https://woodcock.tistory.com/19
ResponseEntity는 왜 사용하는 것이며 @RestControllerAdvice는 무엇일까.
스프링 3.2부터 @ControllerAdvice를 이용해서 편리하게 전역으로 exception handling을 할 수 있습니다. 저도 개인적으로 전역으로 예외를 처리 설정할 때 유용하게 쓰고 있었습니다. 그런데 우연치 않게 @
woodcock.tistory.com
2. Object mapper
- text 형태의 json -> Object로 혹은 Object -> text 형태의 json으로 변환
- ex) controller : req json(text) -> object / object -> res json(text)
// text
@GetMapping("/text")
public String text(@RequestParam String account){
return account;
}
// JSON
// req -> [object mapper] -> object -> [method] -> object -> [object mapper] -> response
@PostMapping("/json")
public User json(@RequestBody User user){
return user;
}
@PutMapping("/putRes")
public ResponseEntity<User> putRes(@RequestBody User user){
return ResponseEntity.status(HttpStatus.CREATED).body(user); // 응답에 대해서 커스터마이징이 필요한경우 사용
}
- User DTO
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
@JsonInclude(JsonInclude.Include.NON_NULL) // 값이 null인 것은 res에 포함하지 않게
public class User {
private String name;
private int age;
private String phoneNumber;
public User(){
this.name = null;
this.age = 0;
this.phoneNumber = "010";
}
public User(String name, int age, String phoneNumber) {
this.name = name;
this.age = age;
this.phoneNumber = phoneNumber;
}
public User defaultUser(){ // objectMapper가 사용할 함수에 get을 넣으면 error. getter와 혼동
return new User("default", 0, "0");
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", phoneNumber='" + phoneNumber + '\'' +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
}
- objectMapper test
// object -> text
// object mapper는 get method를 사용한다
var user = new User("YOONSEOK", 11, "010");
var text = objectMapper.writeValueAsString(user); // User에 get method가 없으면 error!
System.out.println(text);
// text -> object
var objectUser = objectMapper.readValue(text, User.class);
System.out.println(objectUser);
'프로그래밍 > SPRING' 카테고리의 다른 글
한끝완1 (0) | 2022.02.20 |
---|---|
[SPRING] IOC, DI, COMPONENT, BEAN, AOP (0) | 2021.10.25 |
[SPRING] SPRING BOOT 특징, REST API, JSON (0) | 2021.09.08 |
[SPRING] 웹 개발 개론 (0) | 2021.08.16 |
[SPRING] 객체지향 (0) | 2021.08.16 |