일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 어학연수
- 인물
- 금융공학
- UE4
- weblogic
- ue5
- 학생비자
- JPA
- 필라델피아
- jdk17
- rollbackOnly
- mysql
- mastering unreal engine
- 삼성 플렉스북
- spring
- java
- spring security
- HRD
- @JsonView
- 유학
- 주식
- 증시
- 펜실베이니아
- spring message converters
- paper2d
- 월화수목금토익
- AT&T
- 최근증시
- kospi
- flex하는게 아니었는데..
Archives
- Today
- Total
HeBhy, since 1983.
@RestController에서 @JsonView가 없는 Mapping에 자동으로 @JsonView(default class)를 적용하고 싶을 경우 (Applying default '@JsonView' in rest controller which is not presented @JsonView annotation) 본문
Dev/Web
@RestController에서 @JsonView가 없는 Mapping에 자동으로 @JsonView(default class)를 적용하고 싶을 경우 (Applying default '@JsonView' in rest controller which is not presented @JsonView annotation)
HeBhy 2020. 7. 22. 14:01jackson annotation에서 @JsonView를 적용하여 같은 Entity 에 대해 RestController mapping별로 다른 출력을 원할 경우, @RequestMapping(@GetMapping 등 동일..) 에 @JsonView를 붙이지 않으면 Entity에 선언한 @JsonView가 무효화 될 경우가 있습니다.
예를 들어, car entity안의 number라는 값에
@JsonView(JsonViewVisibility.ViewAll.class)
private String number;
처럼 적용했는데, 그대로 json string이 출력됩니다.
그렇다고 일일이 @RequestMapping에 @JsonView(default class)를 붙일수는 없겠죠..
그래서 @JsonView가 선언되지 않은 경우 기본 클래스(여기선 JsonViewVisibility.Anonymous.class라고 가정)를 붙여주기 위해 아래 파일을 만들어줍니다.
package com.example.rest;
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJacksonValue;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.AbstractMappingJacksonResponseBodyAdvice;
@RestControllerAdvice
public class SecurityJsonViewControllerAdvice extends AbstractMappingJacksonResponseBodyAdvice {
@Override
public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
return super.supports(returnType, converterType);
}
@Override
protected void beforeBodyWriteInternal(MappingJacksonValue bodyContainer, MediaType contentType,
MethodParameter returnType, ServerHttpRequest request, ServerHttpResponse response) {
Class<?> defaultViewClass= JsonViewVisibility.Anonymous.class; // 기본값
if(bodyContainer.getSerializationView() == null) { bodyContainer.setSerializationView(defaultViewClass); }
}
}
이제 잘 작동될겁니다~
'Dev > Web' 카테고리의 다른 글
Comments