在部分特殊场景下,我们可能会把实体的字段属性改成全部大写,但是在返回前端时,字段会被序列化成小写。
比如我们有一个这个类属性都是大写:
后端接口是这样的
然后我们请求后,会发现我们的字段被变成全部小写的。
这个就可能会导致前端字段和后端字段大小写不一致的问题。
因此为了规避这个问题我们可以改变序列化规则。
spring默认使用的是jackson,我们就先说jackson 的解决方法。
Jackson
方法一,我们可以使用@JsonProperty
方法二:
我们可以重写jackson消息转换器中的序列化策略
package com.hosptial.config;import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;@Configuration
public class JsonConfig {@Beanpublic HttpMessageConverters jacksonHttpMessageConverters() {// 创建Jackson消息转换器MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();// 创建Jackson配置对象ObjectMapper objectMapper = new ObjectMapper();// 设置序列化规则
// objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);objectMapper.setPropertyNamingStrategy(new CustomPropertyStrategy());// 设置Jackson配置converter.setObjectMapper(objectMapper);// 返回HttpMessageConverters对象return new HttpMessageConverters(converter);}
}
package com.hosptial.config;import com.fasterxml.jackson.databind.PropertyNamingStrategy;import java.util.Locale;public class CustomPropertyStrategy extends PropertyNamingStrategy.PropertyNamingStrategyBase {public String translate(String input) {return input.toUpperCase(Locale.ROOT);}
}