관리 메뉴

제뉴어리의 모든것

[JAVA] Gson.toJson 시 null 인 property 도 포함시켜 반환하도록 하기 본문

JAVA

[JAVA] Gson.toJson 시 null 인 property 도 포함시켜 반환하도록 하기

제뉴어리맨 2022. 10. 31. 00:10

상황

아래와 같은 컨트롤러 단에서 클라이언트에게 전달할 데이터를 body에 담을 때는 담기는 해당 객체의 필드값이 null이여도 해당 필드까지 json 형태로 변환하여 준다.

Validated
@RequiredArgsConstructor
@RequestMapping("/api/members")
@RestController
public class MemberController {

    private final MemberMapper mapper;
    private final MemberService service;

    @PostMapping
    public ResponseEntity postMember(@Valid @RequestBody MemberDto.Post dto) {

        Member member = mapper.memberDtoPostToMember(dto);
        Member createdMember = service.createMember(member);
        MemberDto.Response response = mapper.memberToMemberDtoResponse(createdMember);
        SingleResponseDto<MemberDto.Response> singleResponseDto = new SingleResponseDto<>(response);

		// 바로 요 부분
        return new ResponseEntity(singleResponseDto,HttpStatus.CREATED);
    }
}

 singleResponseDto 안에 존재하는 필드중에 값이 null 이여도 아래와 같이 전달이 될것이다.

{

       data : null,

       name : "januaryMan"

}

 

이것은 스프링에서 

RestController 일 경우

사용되는 HttpMessageConverters 의 특성일 것이다.

그러나, Gson 라이브러리를 그대로 쓰면

위와 같은 상황에서 아래와 같이 value가 null인 필드는 아예 제외 시킨다.

{

       name : "januaryMan"

}

 

하지만, Gson을 이용할때도 

null인 필드도 같이 변환하여 보내고 싶다면 아래와 같이 Gson을 세팅하여 빈으로 등록해 주자.

 

@Configuration
public class GeneralConfiguration {

    @Bean
    Gson gson() {
        //Gson을 아래와 같이 세팅하고 생성하면
        //변환하는 객체의 필드값이 null이여도 파싱함.
        //반면에 아래와 같이 세팅하지 않으면, 객체의 필드값이 null이면 해당 필드 자체를 변환하지 않아서
        //변환된 json 데이터에 값이 null인 필드가 존재하지 않음
        return new GsonBuilder().setPrettyPrinting().serializeNulls().create();
    }
}

 


참조 내용

Gson.toJson() 시 null 인 프로퍼티는 포함하지 않고 값을 반환한다. null 을 포함한 결과 값을 받고 싶으면 아래와 같이 GsonBuilder.serializeNulls 의 설정값을 주게 되면 사용할 수 있다.

    Gson gson = new GsonBuilder()
            .setPrettyPrinting()
            .serializeNulls()
            .create();
    return gson.toJson(OBJECT);

 

참조 url : 

https://apeltop.blogspot.com/2021/06/java-gsontojson-null-property.html