일반적으로 REST API를 만들게 되면 SpringBoot에서는 @RestController를 이용하여 JSON 형식으로 값을 반환하게 된다.
일반적으로 데이터를 반환할 때 StatusCode까지 넘겨주는 방식이 ResponseEntity 그리고 @ResponseStatus 가 있다.
ResponseEntity는 HTTP 요청에 의한 HttpStatus, HttpHeader와 HttpBody를 포함하는 HttpEntity 클래스를 상속받는다.
헤더 와 바디, 상태 코드 로 구성되어 있고 http 응답을 나타낼 때 사용
HttpEntity( http 헤더, 바디 ) 를 상속 받았고, HttpStatus 상태 코드를 추가 할 수 있다.
예시
@RestController
public class MyController {
@GetMapping(path = "/test")
public ResponseEntity<User> test() {
User user = new User();
user.setName("Name 1");
HttpHeaders responseHeaders = new HttpHeaders();
// ...
return new ResponseEntity<>(user, responseHeaders, HttpStatus.OK);
}
}
or
코드를 입력하세요
ResponseEntity 객체 대신 StatusCode를 retuen하고 싶을 때 사용하는 또 다른 방법이다. 바로 @ResponseStatus를 사용하는 것이다.
파라미터로 HttpStatus 객체를 가져와 StatusCode를 보내줄 수 있다.
@RestController
public class MyController {
@GetMapping(path = "/test")
@ResponseStatus(HttpStatus.OK)
public User test() {
User user = new User();
user.setName("Name 1");
return user;
}
}
package com.sparta.jwt_refresh_token_include.dto;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.springframework.http.HttpHeaders;
@Getter
@AllArgsConstructor
public class ResponseDto<T> {
private boolean success;
private T data;
private Error error;
public static <T> ResponseDto<T> success(T data) {
return new ResponseDto<>(true, data, null);
}
public static <T> ResponseDto<T> successHeader(T data, HttpHeaders headers) {
return new ResponseDto<>(true, data, null);
}
public static <T> ResponseDto<T> fail(String code, String message) {
return new ResponseDto<>(false, null, new Error(code, message));
}
@Getter
@AllArgsConstructor
static class Error {
private String code;
private String message;
}
}
@Transactional
public ResponseDto<?> signup(MemberRequestDto memberRequestDto) {
name = memberRequestDto.getNickname();
p1 = memberRequestDto.getPassword();
String p2 = memberRequestDto.getPasswordConfirm();
System.out.println(name);
System.out.println(p1);
System.out.println(p2);
if (!p1.equals(p2)) {
return ResponseDto.fail("PASSWORD_NOT_CORRECT", "비밀번호와 비밀번호 확인이 일치하지 않습니다.");
} else if (name.equals("")) {
return ResponseDto.fail("NickName_Is_NULL", "아이디를 입력해주세요");
} else if (memberRepository.existsByNickname(memberRequestDto.getNickname())) {
return ResponseDto.fail("NickName_Is_Already exist", "중복된 닉네임입니다.");
} else {
Member member = memberRequestDto.toMember(passwordEncoder);
memberRepository.save(member);
return ResponseDto.success(member);
}
}
참고 : https://velog.io/@mooh2jj/SpringBoot-ResponseEntity
참고 : https://newbedev.com/when-use-responseentity-t-and-restcontroller-for-spring-restful-applications