스프링

스프링 1-7. Response

호놀롤루 2022. 3. 15. 19:52

1. 개요

스프링에선 응답을 내려주는 방법이 많다.

 

2. 사용법

2-1. html 반환

@Controller
public class PageController {

    @RequestMapping("/main")
    public String main() {
        return "main.html";
    }
}

src/resources/static

static 안에 main.html을 만들면 http://localhost:8080/main 으로 접속할 때, main.html 화면이 나온다.

 

html이 아닌, Json 데이터를 반환하려면 ResponseEntity

 

2-2. json 반환용 dto

@JsonNaming(value = PropertyNamingStrategy.SnakeCaseStrategy.class)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class User {
    private String name;
    private Integer age;
    private String phoneNumber;
    private String address;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", phoneNumber='" + phoneNumber + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

@JsonNaming 은 저번에 봤던 것처럼 스네이크 케이스를 처리하는 어노테이션이다.

@JsonInclue()는 반환값을 조절할 수 있다.

위의 코드처럼 JsonInclude.Include.NON_NULL 이면 반환값 중, Null인 데이터는 표시되지 않는다.

만약 저게 없으면 반환값에 값이 없으면 Null이라고 반환된다.

 

그리고 age 부분은 int가 아닌 Integer로 되어 있는데 int로 하면 값을 지정하지 않았을 때 0이 return된다.

Integer로 선언해야 Null이 return되어서 값의 유무를 알 수 있다.

 

2-3. return Json

@Controller
public class PageController {

    @RequestMapping("/main")
    public String main() {
        return "main.html";
    }

    @ResponseBody
    @GetMapping("/user")
    public User user() {
        var user = new User();
        user.setName("steve");
        user.setAddress("유타");
        return user;
    }
}

@ResponseBody 어노테이션으로 http://localhost:8080/user 로 들어오면

{
  "name": "steve",
  "address": "�좏�"
}

라는 json데이터가 반환된다.

utf-8이라 한글이 깨지긴 한다. 조만간에 해결방법도 올림

 

만약 dto의 User에서 @JsonInclude(JsonInclude.Include.NON_NULL)이 없다면 Json 데이터에

age와 phoneNumber 도 Null로 나온다.

 

중요한 부분은 html이 아닌 Json을 받는 방법이고,

RestApi를 많이 사용하니 @RestController를 붙이면 굳이 @ResponseBody라는 어노테이션을 사용하지

않아도 return하는 객체에 대한 Json 데이터를 만들어서 반환할 수 있다.