일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 테스트
- MySQL
- ubuntu
- querydsl
- 참조키
- 커밋메세지수정
- AuthenticationEntryPoint
- 외부키
- 메세지수정
- Query
- 서브쿼리
- docker명령어
- WeNews
- 2 > /dev/null
- 추후정리
- 포트
- 컨테이너실행
- application.yml
- 적용우선순위
- 메소드명
- 검색
- appspec
- ㅔㄴ션
- appspec.yml
- 예약
- 네이티브쿼리
- subquery
- foreignkey
- EC2
- 테스트메소드
Archives
- Today
- Total
제뉴어리의 모든것
[JAVA] Gson.toJson 시 null 인 property 도 포함시켜 반환하도록 하기 본문
상황
아래와 같은 컨트롤러 단에서 클라이언트에게 전달할 데이터를 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
'JAVA' 카테고리의 다른 글
컬렉션 프레임워크란? (0) | 2023.05.14 |
---|---|
함수형 인터페이스에 대해 새롭게 알게된 사실 (0) | 2022.10.12 |
HttpServletRequest 객체의 uri에서 path 부분만 얻기 (0) | 2022.10.05 |
제네릭(Generic) 사용한 클래스를 @Builder로 객체 생성하기 (1) | 2022.09.19 |
IntStream과 Stream<Integer>의 차이 (0) | 2022.08.25 |