meta对象写入json错误:com.cutt.zhiyue.android.api.io.exception.JsonFormaterException: com.fasterxml.jackson.databind.JsonMappingException

首先说明出现的原因:json这个东西不够智能,在解析javabean对象中的getter和setter方法时,会把两个方法命名十分相近的方法当成一个。从而形成异常。

解决办法:重新命名方法名。

同时需要注意:json在写入某一个meta对象时,会将其所关联的meta对象统统捋一遍(不一定是重置,可能仅仅是遍历一下)。

这是我们的json写入异常:

com.cutt.zhiyue.android.api.io.exception.JsonFormaterException: com.fasterxml.jackson.databind.JsonMappingException: Conflicting getter definitions for property "groupWanted": com.cutt.zhiyue.android.model.meta.order.OrderProductMeta#isGroupWanted(0 params) vs com.cutt.zhiyue.android.model.meta.order.OrderProductMeta#getGroupWanted(0 params) (through reference chain: com.cutt.zhiyue.android.model.meta.card.CardMetaAtom["article"]->com.cutt.zhiyue.android.model.meta.article.Article["creator"]->com.cutt.zhiyue.android.api.model.meta.UserInfo["product"]->java.util.ArrayList[0])

引起异常的部分代码:

 1     public int getGroupWanted() {
 2         return groupWanted;
 3     }
 4
 5     public void setGroupWanted(int groupWanted) {
 6         this.groupWanted = groupWanted;
 7     }
 8
 9     public boolean isGroupWanted() {
10         return groupWanted == 1;
11     }
getGroupWanted()和isGroupWanted()是不是很像?

发现:

今天测试提了一个bug:由a页跳转到b页,在b页跳转到c页,c页再回到b页时,b页直接销毁了,并且回到了a页。

经过debug后发现:b页中的onCreate()方法中上来就是:

1 super.onCreate(savedInstanceState);
2         if(curAtom == null){
3             notice(R.string.error_article_data);
4             return;
5         }

而引起b页直接销毁的,就是这个curAtom== null。可见curAtom这个变量一定是在父类中初始化的。我们又跳到父类中去查看发现在onCreate()方法中:

        makeAtom(savedInstanceState,intent);
 1     private void makeAtom(Bundle savedInstanceState, Intent intent) {
 2         if (savedInstanceState != null) {
 3             String atom = savedInstanceState.getString(BOUNDLE_ATOM);
 4             try {
 5                 curAtom = JsonParser.getValue(JsonObjectMapper.getObjectMapper(), atom, CardMetaAtom.class);
 6             } catch (DataParserException e) {
 7                 e.printStackTrace();
 8                 curAtom = ArticleActivityFactory.getInputAtom(intent);
 9             }
10         } else {
11             curAtom = ArticleActivityFactory.getInputAtom(intent);
12         }
13     }

这个方法很简单,我就不解释了。经过debug发现savedInstanceState虽然不为空,但从里面取不到值。那我们就需要看看为什么它取不到值,是不是根本就没存上。

于是来到onSaveInstanceState()方法。

 1     @Override
 2     protected void onSaveInstanceState(Bundle outState) {
 3         try {
 4             String atom = JsonWriter.writeValue(curAtom);
 5             outState.putString(BOUNDLE_ATOM, atom);
 6         } catch (JsonFormaterException e) {
 7             e.printStackTrace();
 8         }
 9         super.onSaveInstanceState(outState);
10     }

还是经过debug发现curAtom这个变量根本没有写上,原因就是文章开篇报的那个json异常。

时间: 2024-10-23 03:38:28

meta对象写入json错误:com.cutt.zhiyue.android.api.io.exception.JsonFormaterException: com.fasterxml.jackson.databind.JsonMappingException的相关文章

JSON parse error: Cannot deserialize instance of `int` out of START_OBJECT token; nested exception is com.fasterxml.jackson.databind.exc

代码程序: @PostMapping("selectById") @ResponseBody public Result selectById(@RequestBody int id) { Result result =new Result(); List<User> list = userService.selectById(id); if(list.size()==1){ result.setCode("000"); result.setMsg(&q

400 bad Request: JackSon将json串转成List&lt;Object&gt;,异常com.fasterxml.jackson.databind.JsonMappingException

最近遇到的400, 以前总以为 400 就是参数不匹配造成的,直到今天遇到这个问题 控制台报错如下:  com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of com.infs.xyc.vo.......... 原因是: 封装参数的类中,重写了带参数的构造方法,却忘记生成默认的构造方法了 !!!

com.fasterxml.jackson.databind.ObjectMapper操作对象和集合的一些相互转换用法

概述 JacksonTest AccountBean Birthday 概述 原文链接:http://blog.csdn.net/u011506468/article/details/47342667 最近用到了ObjectMapper,做了些实验.主要有以下一些转换方式: JavaBean(Entity/Model)转换成JSON 将Map集合转换成Json字符串 将List集合转换成json 将json字符串转换成JavaBean对象 将json字符串转换成List集合 将json字符串转换

java对象和json数据转换实现方式3-使用jackson实现

测试代码: package com.yanek.util.json; import java.io.IOException; import java.io.StringWriter; import java.util.ArrayList; import java.util.List; import com.fasterxml.jackson.core.JsonFactory; import com.fasterxml.jackson.core.JsonGenerator; import com.

Jackson实现Object对象与Json字符串的互转

在项目开发过程中,当客户端与服务器响应时,数据交互是必不可少的.然而通过Json实现数据交互成为我们开发中的一部分,进而Jackson为我们的Json转化提供了很好的机制.下面我将利用实例总结如何使用jackson. 一.准备 如果你需要使用jackson,你必须得导入相应的架包,有如下三个包 jackson-annotations:jackson-core:jackson-databind Maven引入依赖代码 <span style="font-size:18px;">

Jackson 对象与json数据互转工具类JacksonUtil

1,User对象 package com.st.json; import java.util.Date; /** * @Description: JSON序列化和反序列化使用的User类 * @author Mr.Li * @date 2018年4月21日 下午10:55:34 */ public class User { private Integer id; private String name; private Integer age; private Date birthday; pr

JsonUtil对象与json互转

OrderDto orderDto = JsonUtil.json2Object(json,     new TypeRef<OrderDto>() {     }); package com.sf.module.bspcommon.util.json; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.TimeZone; import org.slf4j.Logger; import

将对象以json格式写入到文件中

将 list 对象以json格式写入到文件中 try { ObjectMapper mapper = new ObjectMapper(); String value = mapper.writeValueAsString(list); OutputStream out =new FileOutputStream("D:/file/oms.json"); byte[] b=value.getBytes(); for(int i=0;i<b.length;i++){ out.wri

Jquery.ajax报parseerror Invalid JSON错误的原因和解决方法:不能解析

(默认: 自动判断 (xml 或 html)) 请求失败时调用时间.参数有以下三个:XMLHttpRequest 对象.错误信息.(可选)捕获的错误对象.如果发生了错误,错误信息(第二个参数)除了得到 null 之外,还可能是 "timeout" , "error" , "notmodified" 和 "parsererror" . error事件返回的第一个参数XMLHttpRequest有一些有用的信息: XMLHttpR