RealWorld로 스프링부트를 공부하던 중 다음과 같은 Json 포맷을 발견했다.
Request Format
{
"user": {
"email": "jake@jake.jake",
"password": "jakejake",
"username": "jake"
}
}
위와 같이 "user"로 VO를 한번 감싸는 방식의 요청이다.
Response Format
{
"user": {
"email": "jake@jake.jake",
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJqYWtlIiwiZXhwIjoxNjYzOTk2NTA4LCJ1c2VybmFtZSI6Impha2UifQ.W3h0uxdWyvIgbgaG1nqfCsIcvyIG06gZhUT95YVNPCs",
"username": "jake",
"bio": "",
"image": null
}
}
응답도 마찬가지로 "user" 한번 감싸서 Repsonse를 내려주어야한다.
Request
@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME)
@JsonTypeName("user")
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class RegisterDto {
@Email(message = "이메일 포맷이 아닙니다.")
@NotBlank(message = "이메일은 필수 값입니다.")
private String email;
@NotBlank(message = "비밀번호는 필수 값입니다.")
private String password;
@NotBlank(message = "이름은 필수 값입니다.")
private String username;
}
나는 DTO 최상단에 두 줄을 추가했다.
@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME)
@JsonTypeName("user")
Response
@Data
@JsonRootName("user")
@AllArgsConstructor
@Builder
public class UserResponseDto {
private String email;
private String token;
private String username;
private String bio;
private String image;
}
마찬가지로 클래스 상단에 @JsonRootName을 추가해주었다.
만약 똑같이 무반응 상태거나 Controller에서 BAD REQUEST를 내려준다면 @RequestBody에서 막은것이다.
그땐 jackson 라이브러리를 의존성으로 추가하고 아래와 같이 설정해주면된다.
https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind
spring:
jackson:
serialization:
wrap_root_value: true
JsonRootName 추가 이전
{
"email": "jake@jake.jake",
"password": "jakejake",
"username": "jake"
}
JsonRootName 추가 이후
{
"user": {
"email": "jake@jake.jake",
"password": "jakejake",
"username": "jake"
}
}
실무와 최대한 비슷하게 협업할 수 있는 realworld
https://realworld-docs.netlify.app/docs/intro
Introduction | RealWorld
See how the exact same Medium.com clone (called Conduit) is built using different frontends and backends. Yes, you can mix and match them, because they all adhere to the same API spec 😮😎
realworld-docs.netlify.app
https://github.com/ing9990/realworld-spring
GitHub - ing9990/realworld-spring: Starter kit for new RealWorld framework implementations
Starter kit for new RealWorld framework implementations - GitHub - ing9990/realworld-spring: Starter kit for new RealWorld framework implementations
github.com
'Spring > Spring Boot' 카테고리의 다른 글
Effective Java를 읽으며 코드 리펙토링 (0) | 2022.10.08 |
---|---|
객체지향의 사실과 오해를 읽으며 코드 리팩토링 (0) | 2022.09.19 |
[학교 관리 프로젝트] 도메인 단위 테스트와 테스트 코드를 가독성있고 빠르게 작성하는 방법 (0) | 2022.08.31 |
[게시판 RESTful API] - RestController와 Service를 구현해보자 (3) (0) | 2022.08.20 |
[게시판 RESTful API] - domain을 만들며 Entity를 알아보자. (2) (0) | 2022.08.20 |