spring jack 使用自定义的objectMapper。或者在xml配置objectMapper参数

在spring-servlet.xml中配置json的转换器:

<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
		<!-- objectMapper配置 -->
		<property name="objectMapper">	
			 <bean class="com.test.MyObjectMapper" />
	                    <!-- <bean class="com.fasterxml.jackson.databind.ObjectMapper">
	                    	驼峰命名法转换为小写加下划线
	                        <property name="propertyNamingStrategy">
	                            <bean class="com.fasterxml.jackson.databind.PropertyNamingStrategy.LowerCaseWithUnderscoresStrategy" />
	                        </property>
	                        为null字段时不输出
	                        <property name="serializationInclusion">
	                            <value type="com.fasterxml.jackson.annotation.JsonInclude.Include">NON_NULL</value>
	                        </property> 
	                        禁用空对象转换json校验
	                        <property name="configure">
	                            <value type="com.fasterxml.jackson.databind.SerializationFeature">FAIL_ON_EMPTY_BEANS</value>
	                        </property>
	                        忽略未知的字段
	                        <property name="configure">
	                            <value type="com.fasterxml.jackson.databind.DeserializationFeature">FAIL_ON_UNKNOWN_PROPERTIES</value>
	                        </property>
	                    </bean>  -->
	        </property>
		<!-- 支持的类型,编码 -->
		<property name="supportedMediaTypes">
		<span style="white-space:pre">	</span><list>
			<span style="white-space:pre">	</span><value>application/json;charset=UTF-8</value>	
			</list>
	<span style="white-space:pre">	</span></property>
</bean> 


MyObjectMapper.java文件如下:

public class MyObjectMapper extends ObjectMapper {

	private static final long serialVersionUID = 4402127997078513582L;

	public MyObjectMapper() {
        //设置null值不参与序列化(字段不被显示)  
        this.setSerializationInclusion(Include.NON_NULL);
        
        // 禁用空对象转换json校验
        this.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
        this.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        //驼峰命名法转换为小写加下划线
        this.setPropertyNamingStrategy(PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES);
    }
}


 





  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ObjectMapper是一个提供了对象序列化和反序列化功能的Java库。默认情况下,ObjectMapper会通过对象的Getter方法来访问对象的属性,并将其序列化为JSON格式的字符串。 然而,在某些情况下,我们可能希望自定义对象的序列化方式。为了实现自定义序列化,我们可以通过ObjectMapper配置来改变它的行为。 首先,我们可以使用@JsonSerialize注解来标记需要自定义序列化的属性。我们可以在注解中指定一个自定义的序列化器类,该类需要继承JsonSerializer类,并且实现serialize方法,这个方法定义了如何将属性序列化为JSON字符串的逻辑。 例如,假设我们有一个User类,其中有一个属性名为password,我们希望在序列化时将其隐藏起来: ```java public class User { private String username; private String password; // 省略构造方法和Getter/Setter @JsonSerialize(using = CustomPasswordSerializer.class) public String getPassword() { return password; } } public class CustomPasswordSerializer extends JsonSerializer<String> { @Override public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException { gen.writeString("********"); // 替换真实密码的序列化逻辑 } } ``` 上面的例子中,我们通过@JsonSerialize注解自定义了User类中的password属性的序列化方式,使用了CustomPasswordSerializer类进行序列化。 然后,我们需要创建一个ObjectMapper实例,并将其注册到注解的Module中: ```java ObjectMapper objectMapper = new ObjectMapper(); SimpleModule module = new SimpleModule(); module.addSerializer(CustomPasswordSerializer.class, new CustomPasswordSerializer()); objectMapper.registerModule(module); ``` 最后,我们可以使用定制的ObjectMapper来进行对象的序列化操作: ```java User user = new User("admin", "password"); String jsonString = objectMapper.writeValueAsString(user); System.out.println(jsonString); ``` 通过以上配置,我们可以看到在User对象序列化时,password属性的值将会被替换为"********"。这样,我们就实现了对ObjectMapper自定义序列化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值