Response 내려주기 및 모범사례

Minseo Kang·2023년 2월 10일
1

Spring Boot

목록 보기
9/27
post-thumbnail

01. Response 내려주기


개념

  • Spring에서는 응답을 내려주는 다양한 방법들이 존재

  • 요청을 받아야 응답을 내려줄 수 있기 때문에 controller 작성

@RestController
@RequestMapping("/api")
public class ApiController { ... }

dto 작성

package com.example.response.dto;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;

@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(int 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 + '\'' +
                '}';
    }

}



02. Text


@GetMapping으로 넘어온 쿼리 파라미터의 값을 리턴

@GetMapping("/text")
public String text(@RequestParam String account) {
	return account;
}

Response의 Content-Type 확인




03. Json

@PostMapping이므로 @RequestBody 있어야 함

Response는 거의 항상 200 OK Response

동작 방식 : Request -> Object Manager -> Object -> Method -> Object Manager -> Json -> Response

@PostMapping("/json")
public User json(@RequestBody User user) {
	return user;
}

Response의 Content-Type 확인




04. ResponseEntity


PUT은 리소스 생성되면 201 Response

Response 내려줄 때 HttpStatus 정해줄 수 있음 -> ResponseEntity 객체 사용

ResponseEntity에 제네릭 타입으로 dto 클래스 작성

body(user) 부분 - Object Mapper를 통해 Json으로 바뀜

응답에 대한 Customizing 필요할 때 ResponseEntity 사용

@PutMapping("/put")
public ResponseEntity<User> put(@RequestBody User user){
	return ResponseEntity.status(HttpStatus.CREATED).body(user);
}

Response의 Http Status Code 확인




05. HTML 리턴하는 Controller


클래스 작성

  • controller 패키지 안에 PageController 클래스 작성
@Controller // html 리소스를 찾는 annotation
public class PageController { }
  • [ resources ] - [ static ] 폴더에 main.html 작성
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
Main Page Spring Boot
</body>
</html>

PageController

  • @Controller : String 리턴하면 html 리소스를 찾고 해당 리소스를 응답으로 내려줌

  • @ResponseBody : Response Body를 만들어서 응답 내려줌

  • primitive int 타입의 디폴트 값은 0

  • null로 리턴받고 싶으면 Integer(Wrapper 타입)로 변수 선언 해야함

  • null 값 포함하지 않으려면 해당 dto 클래스에 @JsonInclude(JsonInclude.Include.NON_NULL) 작성

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

@ResponseBody
@GetMapping("/user")
public User user() {
    var user = new User(); // 타입 추론
    user.setName("steve");
    user.setAddress("패스트 캠퍼스");
    user.setPhoneNumber("010-1111-2222");
    user.setAge(10);
    return user;
}

Response의 Content-Type 확인


동작 확인



06. 정리


String일반 Text Type 응답
Object자동으로 Json 변환되어 상태값은 항상 200 OK
ResponseEntityBody의 내용을 Object로 설정, 상황에 따라 Http Status Code 설정
@ResponseBodyRestController가 아닌 곳(@Controller)에서 Json 응답을 내릴 때

0개의 댓글