博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jackson 常见问题
阅读量:6501 次
发布时间:2019-06-24

本文共 3450 字,大约阅读时间需要 11 分钟。

org.codehaus.jackson.map.JsonMappingException: No suitable constructor found for type

 

org.codehaus.jackson.map.JsonMappingException: No suitable constructor found 
for
type [simple type, 
class
test.jackson.Employee]: can not instantiate from JSON object (need to add/enable type information?)
 
at [Source: c:\temp\employee.json; line: 
1
, column: 
2
]
   
at org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:
163
)
   
at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:
483
)
   
at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:
350
)
   
at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:
2395
)
   
at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:
1549
)
   
at test.jackson.JSONToJavaExample.main(JSONToJavaExample.java:
19
)

一般来说,解决上面问题从下面几个方面入手:

1、是否缺少默认构造函数

2、是否是类的访问修饰符问题,即jackson访问不到。

 

jackson 的UnrecognizedPropertyException错误

java代码如下:

  1. public class Student implements Serializable{ 
  2.     private static final long serialVersionUID = 685922460589405829L; 
  3.  
  4.     private String name; 
  5.     private String age; 
  6.  
  7.    /*get set略*/ 

json字符串如下:

"{\"address\":\"hunan\",\"name\":\"china\",\"age\":\"5000\"}"

 

这种情况下,使用jackson从string转换为object的时候,会抛出下面异常:

  1. java.lang.IllegalArgumentException: org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "address" (Class util.Student), not marked as ignorable 

意思是说Student类里没有address这个属性,所以无法正常转化,同时还指明了not marked as ignorable,即没有标明可忽略的特性

 

解决方案:

1、在类上添加忽略声明

@JsonIgnoreProperties(ignoreUnknown=true)

2、更改str2obj方法

ObjectMapper objectMapper = new ObjectMapper();    objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);    projectVO = objectMapper.readValue(yourjsonstring, Test.class);

 

Jackson annotation - How to rename element names?

you can rename a property just adding

@JsonProperty("contractor")

And by default Jackson use the getter and setter to serialize and deserialize.

 

Using a custom .

 

public class Response {

private String status; private String error; @JsonProperty("p") @JsonSerialize(using = CustomSerializer.class) private Object data; // ... } public class CustomSerializer extends JsonSerializer<Object> {
public void serialize(Object value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
jgen.writeStartObject(); jgen.writeObjectField(value.getClass().getName(), value); jgen.writeEndObject(); } }

Could not read JSON: Can not construct instance of java.util.Date from String value '2012-07-21 12:11:12': not a valid representation

 

  1. "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
  2. "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
  3. "EEE, dd MMM yyyy HH:mm:ss zzz"
  4. "yyyy-MM-dd"

 

当尸实体中存在Date类型,但是json字符串中是字符串类型

只支持以上几种格式否则报错

 

  1.  
  2. /** 
  3. *  java日期对象经过Jackson库转换成JSON日期格式化自定义类 
  4. * @author godfox 
  5. * @date 2010-5-3 
  6. */ 
  7. public class CustomDateSerializer extends JsonSerializer<Date> { 
  8.  
  9.         @Override 
  10.         public void serialize(Date value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException { 
  11.                 SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 
  12.                 String formattedDate = formatter.format(value); 
  13.                 jgen.writeString(formattedDate); 
  14.         } 

 

然后在你的POJO上找到日期的get方法

Java代码  

  1. @JsonSerialize(using = CustomDateSerializer.class)  
  2.        public Date getCreateAt() {  
  3.                return createAt;  
  4.        }  
  1. @JsonSerialize(using = CustomDateSerializer.class
  2.        public Date getCreateAt() { 
  3.                return createAt; 
  4.        } 

转载于:https://www.cnblogs.com/wych/p/4193271.html

你可能感兴趣的文章
php 引入其他文件中的变量
查看>>
MYSQL体系结构-来自期刊
查看>>
mysql的基本知识
查看>>
exchange 2003配置ASSP 反垃圾邮件
查看>>
webpack入门(二)what is webpack
查看>>
UnitOfWork以及其在ABP中的应用
查看>>
学习C语言必须知道的理论知识(第一章)
查看>>
for语句内嵌例题与个人理解
查看>>
眠眠interview Question
查看>>
[转]CSS hack大全&详解
查看>>
RPC-client异步收发核心细节?
查看>>
#define WIN32_LEAN_AND_MEAN 的作用
查看>>
仿余额宝数字跳动效果 TextCounter
查看>>
(10)Spring Boot修改端口号【从零开始学Spring Boot】
查看>>
Ubuntu16.04安装qt
查看>>
顶部滑动下拉广告
查看>>
简化代码的微小修改
查看>>
python之CSV文件格式
查看>>
你必须知道的.net学习总结
查看>>
leetcode之Reorder List
查看>>