`
wandejun1012
  • 浏览: 2737571 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

jackson 反序列化 字段个数

 
阅读更多

 

这个问题,困惑我很久了。

 

总结:类的字段个数一定要大于json串的字段个数,否则反序列化失败。

 

Demo1:

Junit1:

@Test
    public void testJsonRead(){
    	//1.构造目标Json
    	String targetJson_success = "{\"l\":1,\"m\":2}";
//    	String targetJson_failed = "{\"l\":1,\"m\":2,\"r\":3,\"g\":4}";
//    	String targetJson_normal = "{\"l\":1,\"m\":2,\"r\":3}";
    	
    	//2.构造目标 Java Bean
    	MyTriple mt=JsonMapper.getDefault().readValue(targetJson_success, 
         		MyTriple.class);
    	
    	System.out.println(mt);
    }

 

 

 

类MyTrilple:

/**
 * Copyright (c) 2009-2015. 上海诺诺镑客 All rights reserved.
 * @(#) MyTriple.java 2015年4月23日 下午2:55:24
 */
package com.nonobank.common.domain;
/**
 * @FileName: MyTriple.java
 * @Function:TODO
 * @date: 2015年4月23日 下午2:55:24
 * @author: wandejun
 * @since JDK 1.8
 */
public class MyTriple {

	Short l;
	Integer m;
	Long r;
	public Short getL() {
		return l;
	}
	public void setL(Short l) {
		this.l = l;
	}
	public Integer getM() {
		return m;
	}
	public void setM(Integer m) {
		this.m = m;
	}
	public Long getR() {
		return r;
	}
	public void setR(Long r) {
		this.r = r;
	}
	@Override
	public String toString() {
		return "MyTriple [l=" + l + ", m=" + m + ", r=" + r + "]";
	}
}

 

 

观察Junit1的那个代码,正如注释所说的一样,targetJson_success、targetJson_normal的json串全部可以反序列化成功,但是targetJson_failed就是失败的。

 

原因就是我上面所说的,targetJson_success是2个参数,分别是l,m,而MyTriple类中是3个参数l,m,r

那么3>=2,所以targetJson_success是可以的。

 

targetJson_failed是4个参数,分别是l,m,r,r而MyTriple类中是3个参数l,m,r

那么3<=4,所以targetJson_failed是不可以的。

 

---------------------------------------------------------------------------------------------------

Demo2:

 

转化类:

/**
	 * 
	 * @Title: getStudentInfoBySessionId
	 * @Description:根据sessionId从memchache中获取用户信息
	 * @param sessionId
	 * @return
	 * @Return: Map<String,String>
	 *
	 */
	public MicroPHPResult getStudentInfoBySessionId(String sessionId) {
		MultiValueMap<String, String> form = new LinkedMultiValueMap<String, String>();
		form.add("sessionId", sessionId);
		String microPhpUrl = DefaultWebAppConfigure.getConfigure().getMicroPhpUrl();
        String phpResp = restTemplate.postForObject(microPhpUrl + "user/getSessionData", form, String.class);
        if (phpResp == null) {
        	LOG.error("根据sessionId获取用户信息超时.");
            return null;
        }
        MicroPHPResult result = readJsonValue(phpResp, MicroPHPResult.class);
        return result;
    }

 

 

MicroPHPResult:

package com.nonobank.web.web.controller.credit.bean;


public class MicroPHPResult {
	
	private String flag;
	
	private String msg;
	
	private UserInfoData data;
	

	public String getFlag() {
		return flag;
	}

	public void setFlag(String flag) {
		this.flag = flag;
	}

	public UserInfoData getData() {
		return data;
	}

	public void setData(UserInfoData data) {
		this.data = data;
	}

	@Override
	public String toString() {
		return "MicroPHPResult [flag=" + flag + ", data=" + data
				+ ", getFlag()=" + getFlag() + ", getData()=" + getData()
				+ ", getClass()=" + getClass() + ", hashCode()=" + hashCode()
				+ ", toString()=" + super.toString() + "]";
	}

	public String getMsg() {
		return msg;
	}

	public void setMsg(String msg) {
		this.msg = msg;
	}
	

}

 

注意到:phpResp这个字符串是接口返回的,它必须包含2个参数,一个是flg,一个是msg.

 

在成功的情况下会追加参数:data

在失败的情况下则没有data参数.

 

因此,只要类中有flg和msg就不会出错。

 

 

 

 

 

 

分享到:
评论

相关推荐

    jackson json序列化,反序列化所需jar包

    `jackson-annotations-2.2.3.jar` 提供了诸如`@JsonProperty`、`@JsonIgnore`、`@JsonInclude`等注解,可以方便地控制哪些字段应该被序列化或反序列化,以及如何处理特定的数据类型。 要使用Jackson库进行JSON序列...

    jackson库实现定制化的java序列化反序列化操作

    例如,如果我们有一个`Person`类,我们可能希望在序列化时不包含某些字段,或者在反序列化时忽略某些输入。通过使用`@JsonIgnore`注解,我们可以排除特定属性。另外,可以使用`@JsonCreator`注解来指定一个构造函数...

    fastJosn Gson Jackson 序列化和反序列化所需要的jarlib.rar

    此外,FastJson还支持JSON到Java的映射配置,可以自定义字段的序列化和反序列化规则。 2. Gson: Gson是Google提供的一个开源项目,用于在Java对象和JSON数据之间进行映射。Gson可以将任何Java对象转换成对应的...

    C#和Java的序列化反序列化

    在编程领域,序列化和反序列化是两个关键的概念,特别是在跨平台通信、持久化存储以及数据传输中扮演着重要角色。本篇文章将深入探讨C#和Java中的序列化与反序列化机制。 首先,我们要了解什么是序列化。序列化是指...

    Json反序列化

    在"TestJson"这个例子中,可能包含了一个或多个测试用例,用于检验JSON反序列化的正确性。这可能是一个简单的JSON字符串,或者是一个包含复杂嵌套结构的JSON对象。开发者通常会编写测试代码,模拟从服务器获取JSON...

    实例解析Json反序列化之ObjectMapper(自定义实现反序列化方法)

    在讨论Json反序列化过程中,我们通常会采用ObjectMapper类这一常用的工具。ObjectMapper是Jackson库中的一个核心类,它提供了丰富的API来处理JSON数据。在服务器端开发中,我们常常需要处理来自第三方接口的JSON数据...

    Java 多次序列化对象到同壹個文件及反序列化的问题

    4. **使用版本控制的序列化策略**:例如,使用JSON库(如Jackson或Gson)进行序列化,这些库通常能更好地处理类结构的变化,同时支持版本控制,允许在反序列化时兼容旧版本的数据格式。 5. **持久化存储的替代方案*...

    Java Json序列化与反序列化

    总结,Java中的JSON序列化与反序列化是数据交互的重要环节,Jackson和Gson是两个常用的库,它们提供了丰富的功能和良好的API设计,使得处理JSON数据变得简单高效。通过理解和掌握这些知识,开发者可以更好地在Java...

    序列化与反序列化经典例子

    5. **序列化框架**:除了标准的Java序列化机制,还有许多高级的序列化库,如Jackson、Gson、protobuf等,它们提供了更灵活的配置和更好的性能。 在实际项目中,理解并熟练掌握序列化和反序列化对于开发高效、安全的...

    Java对象的序列化和反序列化实践

    在Java编程语言中,对象的序列化和反序列化是两个关键的概念,它们允许我们将对象的状态转换为可存储或传输的格式,然后再恢复为原始对象。这个过程对于数据持久化、网络传输以及跨进程通信等场景非常有用。下面将...

    对象的序列化和反序列化

    在反序列化过程中,JVM会根据字节流中的信息创建一个新的对象实例,并填充相应的字段值。然而,反序列化时需要注意安全问题,因为它可能会执行对象构造函数和字段初始化代码,因此如果数据来源不可信,可能会引入...

    Jackson多态序列化.doc

    Jackson 库提供了多态序列化的功能,能够将基类和子类正确地序列化和反序列化。多态序列化指的是在序列化和反序列化过程中,能够正确地识别和处理基类和子类之间的关系。 在本文中,我们将通过一个示例来展示 ...

    redis使用过程中由于序列化工具引起的问题

    5. **安全**:序列化漏洞可能导致安全问题,例如反序列化攻击。 因此,选择合适的序列化工具至关重要。对于Java对象,推荐使用高效的JSON序列化库,如Jackson或Gson,它们支持配置以优化性能和数据大小。同时,确保...

    java 常用序列化和反序列化框架使用demo

    虽然简单易用,但效率较低,且序列化的元数据(如类名、字段名)会被包含在字节流中,存在安全风险(如反序列化攻击)。 2. **FST(Fast-serialization)**: FST是一个高性能的序列化库,它通过优化的二进制格式...

    Java对象的序列化与反序列化Java开发Java经验技巧

    - **手动指定**:为了确保反序列化时的兼容性,开发者可以手动在类中声明一个`static final long serialVersionUID`字段,值通常为`private static final long serialVersionUID = 1L;`。 - **变化的影响**:如果...

    SpringBoot中时间类型序列化、反序列化、格式处理.docx

    这样,所有日期时间类型的字段在序列化到JSON时,都会按照这个格式显示,同时在反序列化时也会按照此格式解析。 2. **自定义日期转换器**: 对于GET请求中的查询参数,Spring提供了一种机制通过实现`Converter`...

    不用注解的json字段忽略

    在JSON序列化与反序列化的场景中,我们经常使用如Jackson这样的库来处理Java对象与JSON字符串之间的转换。Jackson库提供了强大的功能,包括通过注解来控制哪些字段应该被序列化或忽略。然而,有时我们需要更灵活的...

    java 序列化时排除指定属性

    然而,有时候我们不希望序列化对象的所有属性,可能是因为某些属性包含敏感信息,或者它们在反序列化时不需要。针对这种情况,Java提供了机制来排除特定属性进行序列化。本文将深入探讨如何在Java中实现这一功能。 ...

    如何利用Jackson序列化忽略指定类型的属性详解

    Jackson 序列化是基于 Java 反射机制的,通过对对象的字段进行序列化生成 JSON 字符串。然而,在序列化 Apache Avro 对象时,可能会遇到一些问题,例如序列化 Apache Avro 对象的 Schema 属性时抛出异常。 问题的...

Global site tag (gtag.js) - Google Analytics