客戶端可以通過添加到 api 引數來決定 PropertyNamingStrategy 是 SNAKE_CASE 還是 CAMEL_CASE。
我的想法是在進入控制器自定義ObjectMapper之前做aop攔截器。
我為 ObjectMapper 物件設定了 setPropertyNamingStrategy 但它只獲得了第一個 PropertyNamingStrategy 集,第一次之后設定的值不被使用。
@Aspect
@Component
@RequiredArgsConstructor
public class NamingJsonAspect {
private final ObjectMapper objectMapper;
@Pointcut("execution(public * com.nnv98..*Controller.*(..))")
private void namingJson() {}
@SneakyThrows
@Before("namingJson()")
public void doAround(JoinPoint proceedingJoinPoint) {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
assert attributes != null;
HttpServletRequest request = attributes.getRequest();
String namingJson = request.getParameter("namingJson");
if(namingJson.equals("SNAKE_CASE")){
objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
}else {
objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.LOWER_CAMEL_CASE);
}
}
}
謝謝
uj5u.com熱心網友回復:
您應該閱讀ObjectMapper的 JavaDoc 。
您所看到的是預期行為,如 JavaDoc 中所述:配置只能在第一次讀/寫使用之前完成。首次使用后,更改配置可能無效或可能導致錯誤。JavaDoc 還解釋了如何解決該限制。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/438148.html
