ObjectMapper 的使用和常用注解 过滤条件

主要讲解的是实体序列化是的几个注解

实体上

@JsonIgnoreProperties({"sex","addTime"}) //序列化时忽略的属性名称集合 ,加载类上,给出的属性都不序列化

@JsonProperty("stu_id") //序列化时,如果要修改某些属性的名字,可以使用, 序列化 将id改为 stu_id

@JsonIgnore //序列化时忽略字段,可以加载 属性上 、方法上

 

ObjectMapper上

// 序列化时 ,属性值为null的忽略

MAPPER.setSerializationInclusion(Inclusion.NON_NULL);

        //通过该方法对mapper对象进行设置,所有序列化的对象都将按改规则进行系列化

        //Include.Include.ALWAYS 默认

        //Include.NON_DEFAULT 属性为默认值不序列化

        //Include.NON_EMPTY 属性为 空(“”) 或者为 NULL 都不序列化

        //Include.NON_NULL 属性为NULL 不序列化

只对pojo起作用,对map和list不起作用


忽略实体类中不含有的字段方法,用在方法中

 MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);



下面是例子

 

实体类pojo

package cn.com.log.demo;

import java.io.Serializable;
import java.util.Date;

import org.codehaus.jackson.annotate.JsonIgnore;
import org.codehaus.jackson.annotate.JsonIgnoreProperties;
import org.codehaus.jackson.annotate.JsonProperty;

@JsonIgnoreProperties({"sex","addTime"})  //序列化时忽略的属性名称集合  ,加载类上,给出的属性都不序列化
public class student implements Serializable{
	/**
	 * @Fields serialVersionUID : 
	 */
	private static final long serialVersionUID = -6510230638877789163L;
	@JsonProperty("stu_id")	//序列化时,如果要修改某些属性的名字,可以使用, 序列化 将id改为 stu_id
	private Integer id ;
	@JsonIgnore		//序列化时忽略字段,可以加载 属性上 、方法上   
	private String name ;
	private Integer age ;

	private String sex;
	private Date addTime ;
	public Date getAddTime() {
		return addTime;
	}
	public void setAddTime(Date addTime) {
		this.addTime = addTime;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	
}

 

 

测试类

package cn.com.log.demo;

import java.io.IOException;

import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion;


public class testjson {
	
	
	private static final ObjectMapper MAPPER = new ObjectMapper();
	
	public static void main(String[] args) throws JsonGenerationException, JsonMappingException, IOException {
		
		
		// 序列化时  ,属性值为null的忽略
		MAPPER.setSerializationInclusion(Inclusion.NON_NULL);
/*	
		2.代码上
		ObjectMapper mapper = new ObjectMapper();

		mapper.setSerializationInclusion(Include.NON_NULL);  

		//通过该方法对mapper对象进行设置,所有序列化的对象都将按改规则进行系列化 
		//Include.Include.ALWAYS 默认 
		//Include.NON_DEFAULT 属性为默认值不序列化 
		//Include.NON_EMPTY 属性为 空(“”) 或者为 NULL 都不序列化 
		//Include.NON_NULL 属性为NULL 不序列化 

		User user = new User(1,"",null); 
		String outJson = mapper.writeValueAsString(user); 
		System.out.println(outJson);


		注意:只对VO起作用,Map List不起作用
*/

		student stu = new student();
		stu.setName("aaav");
		
		String data = MAPPER.writeValueAsString(stu);
		System.out.println(data);
		
	}
}


 

我项目中    数据库获取时只获取有用的数据,其他不获取,然后序列化




有时候,如果数据库表中增加一个字段,但返回的JSON字符串中含有我们并不需要的字段,那么当对应的实体类中不含有该字段时,会抛出一个异常,告诉你有些字段没有在实体类中找到。解决办法很简单,在声明ObjectMapper之后,加上上述代码:

objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

     Java.lang.Object
        java.lang.Enum<DeserializationFeature>
            com.fasterxml.jackson.databind.DeserializationFeature 

FAIL_ON_UNKNOWN_PROPERTIES

Feature that determines whether encountering of unknown properties (ones that do not map to a property, and there is no "any setter" or handler that can handle it) should result in a failure (by throwing a JsonMappingException) or not.

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ObjectMapper是一个非常流行的Java库,用于将Java对象转换为JSON格式,以及将JSON格式转换为Java对象。下面是一个使用ObjectMapper的示例代码: ``` import com.fasterxml.jackson.databind.ObjectMapper; public class Example { public static void main(String[] args) { // Create an instance of ObjectMapper ObjectMapper objectMapper = new ObjectMapper(); // Convert a Java object to JSON MyObject myObject = new MyObject("John", 30); try { String json = objectMapper.writeValueAsString(myObject); System.out.println(json); } catch (JsonProcessingException e) { e.printStackTrace(); } // Convert JSON to a Java object String json = "{\"name\":\"John\",\"age\":30}"; try { MyObject myObject = objectMapper.readValue(json, MyObject.class); System.out.println(myObject.getName()); System.out.println(myObject.getAge()); } catch (JsonProcessingException e) { e.printStackTrace(); } } } class MyObject { private String name; private int age; public MyObject() {} public MyObject(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } ``` 在上面的示例中,我们首先创建了一个ObjectMapper实例。然后,我们将一个Java对象转换为JSON字符串,使用writeValueAsString()方法。接着,我们将JSON字符串转换为Java对象,使用readValue()方法。注意,我们需要传入要转换的Java对象的类类型。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值