JsonMappingException: (was java.lang.NullPointerException)

本文分析了使用Jackson进行Java对象序列化时遇到的NullPointerException异常原因,并提供了两种解决方案:一是修改getter方法的返回类型;二是对可能为空的字段进行非空判断。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用jackson 序列化java对象的时候报异常:

com.fasterxml.jackson.databind.JsonMappingException: (was java.lang.NullPointerException) (through reference chain: com.chanjet.gov.Student["age"])
	at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:218)
	at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:183)
	at com.fasterxml.jackson.databind.ser.std.StdSerializer.wrapAndThrow(StdSerializer.java:155)
	at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:512)
	at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:117)
	at

 

被序列化的类:

package com.chanjet.gov;

import org.springframework.web.bind.annotation.ModelAttribute;

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;

/**
 * Created by JasonQin on 2015/7/1.
 */
@JsonAutoDetect
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Student  {

	public Student() {
	}

	/***
	 * 用户数显示名称
	 */
	public String name;
	/***
	 * 每用户的免费存储空间
	 */
	public Integer age;


	@ModelAttribute("name")
	public String getName() {
		return name;
	}

	@ModelAttribute("age")
	public int getAge() {
		return age;
	}
}

测试方法:

@Test
	public void test_PolicyInfo(){
		ObjectMapper mapper = new ObjectMapper();
		Student s=new Student();
		
		try {
			System.out.println(mapper.writeValueAsString(s));
		} catch (JsonGenerationException e) {
			e.printStackTrace();
		} catch (JsonMappingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

  原因:Student 类中成员变量age的属性是Integer(包装类型),但是在对应的getter方法中,返回的却是基本类型int.

解决方法:

方式一:修改getter方法,返回值改为包装类型Integer

方式二:

修改getter方法为:

@ModelAttribute("age")
	public int getAge() {
		if(age==null){
			return 0;
		}
		return age;
	}

 

参考:http://www.cnblogs.com/jimmy-c/p/3978799.html

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值