본문 바로가기
프로그래밍/SPRING

[SPRING] Response, ObjectMapper

by 두둠칫 2021. 9. 9.

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