@Slf4j
@RestControllerAdvice
public class MyResponseBodyAdvice implements ResponseBodyAdvice {
@Override
public boolean supports(MethodParameter returnType, Class converterType) {
return true;
@Override
public Object beforeBodyWrite(Object body, MethodParameter returnType,
MediaType selectedContentType, Class selectedConverterType,
ServerHttpRequest request, ServerHttpResponse response) {
Response res = new Response();
res.setData(body);
return res;
@Setter
@Getter
@ToString
public class User {
private String nickname;
private String idCard;
Controller
@RestController
public class TestController {
@GetMapping("/testObject")
public User testObject() {
User user = new User();
user.setNickname("nickname");
user.setIdCard("idcard");
return user;
key 命名策略
UpperCamelCaseStrategy
首字母大写的驼峰方式,@JsonProperty
优先级更高(msgHint
没有受UpperCamelCaseStrategy
影响)
"CodeInfo": 0,
"Data":
"Nickname": "nickname",
"IdCard": "idcard"
"msgHint": "success"
LowerCamelCaseStrategy
首字母小写的驼峰方式
"codeInfo": 0,
"data":
"nickname": "nickname",
"idCard": "idcard"
"msgHint": "success"
UpperSnakeCaseStrategy
大写及下划线拼接
"CODE_INFO": 0,
"DATA":
"NICKNAME": "nickname",
"ID_CARD": "idcard"
"msgHint": "success"
SnakeCaseStrategy
小写及下划线拼接
"code_info": 0,
"data":
"nickname": "nickname",
"id_card": "idcard"
"msgHint": "success"
LowerCaseStrategy
"codeinfo": 0,
"data":
"nickname": "nickname",
"idcard": "idcard"
"msgHint": "success"
KebabCaseStrategy
中划线拼接
"code-info": 0,
"data":
"nickname": "nickname",
"id-card": "idcard"
"msgHint": "success"
LowerDotCaseStrategy
小写及.
拼接
"code.info": 0,
"data":
"nickname": "nickname",
"id.card": "idcard"
"msgHint": "success"
YAML 配置
spring:
jackson:
property-naming-strategy: com.fasterxml.jackson.databind.PropertyNamingStrategies.UpperCamelCaseStrategy
# property-naming-strategy: com.fasterxml.jackson.databind.PropertyNamingStrategies.LowerCamelCaseStrategy
# property-naming-strategy: com.fasterxml.jackson.databind.PropertyNamingStrategies.UpperSnakeCaseStrategy
# property-naming-strategy: com.fasterxml.jackson.databind.PropertyNamingStrategies.SnakeCaseStrategy
# property-naming-strategy: com.fasterxml.jackson.databind.PropertyNamingStrategies.LowerCaseStrategy
# property-naming-strategy: com.fasterxml.jackson.databind.PropertyNamingStrategies.KebabCaseStrategy
# property-naming-strategy: com.fasterxml.jackson.databind.PropertyNamingStrategies.LowerDotCaseStrategy
Java 配置
@Configuration
public class ObjectMapperConfig {
@Bean
public ObjectMapper objectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setPropertyNamingStrategy(PropertyNamingStrategies.UpperCamelCaseStrategy.INSTANCE);
return objectMapper;
使用@JsonNaming
注解指定命名策略。
@Setter
@Getter
@Data
@JsonNaming(PropertyNamingStrategies.UpperCamelCaseStrategy.class)
public class Response {
private int codeInfo;
private Object data;
@JsonProperty("msgHint")
private String msgHint = "success";
PropertyNamingStrategy
不适用于Map
集合。
PropertyNamingStrategy not work on Map #2559
Views: 491 · Posted: 2024-09-18
————        END        ————