在部分特殊场景下,我们可能会把实体的字段属性改成全部大写,但是在返回前端时,字段会被序列化成小写。
比如我们有一个这个类属性都是大写:
后端接口是这样的
然后我们请求后,会发现我们的字段被变成全部小写的。
这个就可能会导致前端字段和后端字段大小写不一致的问题。
因此为了规避这个问题我们可以改变序列化规则。
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 {
@Bean
public 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);
}
}