[Spring] String Boot Web 응답 만들기

개발log·2024년 3월 17일

Spring

목록 보기
3/16
post-thumbnail

응답을 만드는 방법

  • String 일반 Text Type 응답
  • Object 자동으로 Json 변환되어 응답
  • ResponseEntity Body의 내용을 Object로 설정
  • @ResponseBody RestController가 아닌 곳에서 Json 응답을 내릴 때 사용

기본 객체 응답

  • Object 자동으로 Json 변환되어 응답

예제 코드

ReponseApiController

@RestController
@RequestMapping("/api/v1")
public class ReponseApiController {
    @GetMapping("")//기본 매핑
    public UserRequest user(){
        var user = new UserRequest(); //var = 변수의 타입을 자동으로 선언
        user.setUserName("홍길동");
        user.setUserAge(10);
        user.setEmail("hyeKjung.com");
        return user; // 객체 return
    }
}

UserRequest

@Data
@AllArgsConstructor
@NoArgsConstructor
//요청이 snake case로 들어오면 자동적으로 해당 클래스의 변수들을 snake case로 매핑
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
public class UserRequest {
    private String userName;
    private Integer userAge;
    private String email;
    private Boolean isKorean; //boolean의 기본값 false
}

결과

ResponseEntity 사용

  • HTTP 응답 코드(Status Code)를 설정(조작)하는 방법
  • ResponseEntity.status(HttpStatus.CREATED) Status Code 설정
  • 아래 코드에서는 위의 200 Status Code를 201로 바꿈.
  • header 설정도 가능

예제 코드

@Slf4j
@RestController
@RequestMapping("/api/v1")
public class ReponseApiController {
    @GetMapping("")//기본 매핑
    public ResponseEntity<UserRequest> user(){
        var user = new UserRequest(); //var = 변수의 타입을 자동으로 선언
        user.setUserName("홍길동");
        user.setUserAge(10);
        user.setEmail("hyeKjung.com");
        user.setIsKorean(true);

        log.info("user: {}",user);

        var response = ResponseEntity.status(HttpStatus.CREATED).header("custom","hi").
        body(user);
        return response;
    }
}

결과

  • Status 200에서 201로 변경
  • header에 custom:hi가 들어온 것을 확인할 수 있음.

Status Code 참고

    CHECKPOINT(103, HttpStatus.Series.INFORMATIONAL, "Checkpoint"),
    OK(200, HttpStatus.Series.SUCCESSFUL, "OK"),
    CREATED(201, HttpStatus.Series.SUCCESSFUL, "Created"),
    ACCEPTED(202, HttpStatus.Series.SUCCESSFUL, "Accepted"),
    NON_AUTHORITATIVE_INFORMATION(203, HttpStatus.Series.SUCCESSFUL, "Non-Authoritative Information"),
    NO_CONTENT(204, HttpStatus.Series.SUCCESSFUL, "No Content"),
    RESET_CONTENT(205, HttpStatus.Series.SUCCESSFUL, "Reset Content"),
    PARTIAL_CONTENT(206, HttpStatus.Series.SUCCESSFUL, "Partial Content"),
    MULTI_STATUS(207, HttpStatus.Series.SUCCESSFUL, "Multi-Status"),
    ALREADY_REPORTED(208, HttpStatus.Series.SUCCESSFUL, "Already Reported"),
    IM_USED(226, HttpStatus.Series.SUCCESSFUL, "IM Used"),
    MULTIPLE_CHOICES(300, HttpStatus.Series.REDIRECTION, "Multiple Choices"),
    MOVED_PERMANENTLY(301, HttpStatus.Series.REDIRECTION, "Moved Permanently"),
    FOUND(302, HttpStatus.Series.REDIRECTION, "Found"),
profile
나의 개발 저장소

0개의 댓글