Study/Java
Jackson ObjectMapper 특정 요청에 대해서만 jsonIgnore 처리하여 응답하기
Bluesky_
2023. 7. 5. 19:58
반응형
objectMapper를 사용하면 보통 다음처럼 @JsonIgnore 처리를 하여 response 값에서 제외 처리를 하게 된다.
public class SomeDomain {
private int someFieldA;
@JsonIgnore
private int someFieldB;
@JsonIgnore
private String someFieldC;
}
전체 공통으로 @JsonIgnore를 사용하지 않고 새로 추가하는 요청에 대해 특정 필드를 숨기고 싶은 경우가 있다.
simpleModule로 deserializer를 등록하는 건 전체 공통 적용인 것 같고 @JsonView를 @ResponseBody에 사용하려면 기존에 사용하던 전 구간에 @JsonView를 지정해야 하는 문제가 있다. (exclude 기능을 하는 json view annotation을 찾지 못하였다..)
@JsonFilter의 사용도 비슷한 이유로 쓰기 애매했다.
결국 아래처럼 사용하였다.
@Controller
@RequestMapping(/** mapping 설정 **/)
public class SomeController {
@Autowired
private Jackson2ObjectMapperBuilder builder;
private ObjectMapper objectMapper;
public void postConstruct() {
objectMapper = builder.createXmlMapper(false).build();
objectMapper.addMixIn(SomeDomain.class, SomeDomainMixIn.class);
}
@JsonIgnoreProperties({ "someFieldB", "someFieldC" })
class SomeDomainMixIn {}
@GetMapping("/someRequest")
public String someRequest() {
var someDomain = // someDomain 획득
return objectMapper.writeValueAsString(someDomain);
}
}
objectMapper를 따로 사용하고 응답을 String으로 반환하면서 mixin으로 제외할 필드를 지정하였다.
응답을 String으로 바꿔서 사용하고 objectMapper를 따로 지정하는 게 그리 좋은 방법 같지 않은데 더 나은 방법을 찾지 못하였다.
반응형