参考博客:http://www.cnblogs.com/yucy/p/9057049.html

1.经常遇到这种情况,传过来json的key名和我们javaBean的属性名不一样,导致接收不到:

Child类用来接收传过来的json串:

package com.test.dto;

import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle; public class Child {
private String childName;
private String childAge;
private String chileFather; public String getChildName() {
return childName;
} public void setChildName(String childName) {
this.childName = childName;
} public String getChildAge() {
return childAge;
} public void setChildAge(String childAge) {
this.childAge = childAge;
} public String getChileFather() {
return chileFather;
} public void setChileFather(String chileFather) {
this.chileFather = chileFather;
} @Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
}
}

Controller来接收json串:

发送的json串:

package com.test.controller;

import com.test.dto.Child;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; @Controller
public class TestController2 { /**
* jsonField测试
* @param child
*/
@RequestMapping("/testJsonField.do")
public void testJsonField(@RequestBody Child child){
System.out.println(child);
}
}

打印出来,看到是收不到的:

Child[childName=<null>,childAge=<null>,chileFather=<null>]

2.对于这种@RequestBody的使用@JsonProperty将传过来的json key名能够映射到javaBean上:

Child:

package com.test.dto;

import com.fasterxml.jackson.annotation.JsonProperty;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle; public class Child {
private String childName;
private String childAge;
private String chileFather; public String getChildName() {
return childName;
} @JsonProperty(value = "child_name")
public void setChildName(String childName) {
this.childName = childName;
} public String getChildAge() {
return childAge;
} @JsonProperty(value = "child_age")
public void setChildAge(String childAge) {
this.childAge = childAge;
} public String getChileFather() {
return chileFather;
} public void setChileFather(String chileFather) {
this.chileFather = chileFather;
} @Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
}
}

这样能收到了:

Child[childName=小孩儿,childAge=4,chileFather=<null>]

3.当使用fastjson解析数据时。

1)Child类此时不加任何注解。

2)发送请求:http://localhost:8081/testJsonField.do?childStr={child_name:123, child_age:1}

3)controller接收:

可以看到此时是接受不到的。

4)我们在Child类属性的set方法上加上@JSONField注解,name来匹配json串中的key:

public class Child {
private String childName;
private String childAge;
private String chileFather; public String getChildName() {
return childName;
} @JSONField(name="child_name")
public void setChildName(String childName) {
this.childName = childName;
} public String getChildAge() {
return childAge;
} @JSONField(name="child_age")
public void setChildAge(String childAge) {
this.childAge = childAge;
} public String getChileFather() {
return chileFather;
} public void setChileFather(String chileFather) {
this.chileFather = chileFather;
} @Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
}
}

再次接受就能收到了:

5)使用@JSONField(serialize = false)   在get方法上添加来过滤掉不需要序列化的字段:

Child类:

package com.test.dto;

import com.alibaba.fastjson.annotation.JSONField;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle; public class Child {
private String childName;
private String childAge;
private String chileFather; public String getChildName() {
return childName;
} @JSONField(name="child_name")
public void setChildName(String childName) {
this.childName = childName;
} public String getChildAge() {
return childAge;
} @JSONField(name="child_age")
public void setChildAge(String childAge) {
this.childAge = childAge;
} @JSONField(serialize = false)
public String getChileFather() {
return chileFather;
} public void setChileFather(String chileFather) {
this.chileFather = chileFather;
} @Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
}
}

我们可以看到childFather字段没有被序列化:

-----

@JSONField使用的更多相关文章

  1. FastJson中@JSONField注解使用

    最近做项目中,使用了json格式在服务器之间进行数据传输.但是发现json格式数据不符合JAVA中的变量定义规则,并且难以理解,因此需要在后台中做二次处理,将数据处理成我们系统中定义的格式. 思路: ...

  2. Springboot使用alibaba的fastJson,@JSONField不起作用的问题

    在Springboot中默认的JSON解析框架是jackson 今天引入alibaba的fastjson,使用@JSONField(serialize=false),让@RestController转 ...

  3. fastjson的@JSONField注解

    @JSONField作用:在字段和方法上1.Field:@JSONField作用在Field时,name可以定义输入key的名字,反序列化的时 值不会赋值到属性上2.作用在setter和getter方 ...

  4. fastJson注解@JSONField使用的一个实例

    1.实体类 package jsonArrayjsonObject.cn; import java.io.Serializable; import java.util.Date; import com ...

  5. 【源码分析】FastJson全局配置日期格式导致@JSONField(format = "yyyy-MM-dd")注解失效

    出现的问题 我全局配置的时间格式是:yyyy-MM-dd HH:mm:ss @JSONField注解配置的时间格式是:yyyy-MM-dd 最终的返回结果是:yyyy-MM-dd HH:mm:ss 问 ...

  6. @JSONField注解的使用

    FastJson中的注解@JSONField,一般作用在get/set方法上面,常用的使用场景有下面三个: 修改和json字符串的字段映射[name] 格式化数据[format] 过滤掉不需要序列化的 ...

  7. JSONField解决序列化与反序列化字段匹配问题

    需求:调用第三方数据,数据格式为Json,并提供一个接口将获取的第三方数据给本公司其他部门调用. 处理流程:第三方Json--反序列化实体--保存到本地数据库--查询数据--序列化Json数据供本公司 ...

  8. fastjson的@JSONField注解的一点问题

    @JSONField 看源码它可以作用于字段和方法上. 引用网上说的, 一.作用Field @JSONField作用在Field时,其name不仅定义了输入key的名称,同时也定义了输出的名称. 但是 ...

  9. @JsonField 修改json字段属性名称

    在前后端分离的开发方式中,经常会遇到后端字段名称和前端字段名称定义不一致的问题,比如,后端定义的Bean中的字段名称为createAt,而前端用的字段名称为createTime.这种情况下可以通过在前 ...

随机推荐

  1. 2019-04-24-day039-数据库的增查

    内容回顾 多积累使用工具的经验 尽量多练习 1.多练几种类型 2.不要照着写好的sql敲,要自己组织语言 内容回顾 存储引擎 innodb : 外键 行级锁(并发修改) 事务(客户管理系统) myis ...

  2. 洛谷P1966 【火柴排队】

    题解 P1966 [火柴排队] 说明: 在数学中有个公式: (a1-b1)^2+(a2-b2)^2<(a2-b1)^2+(a1-b2)^2 (你可以自己试着证一下) 两列火柴对应的两根火柴在各列 ...

  3. anaconda3下64位python和32位python共存

    查看当前工作平台:conda info 切换64位和32位: set CONDA_FORCE_32BIT=1是切换到32位 set CONDA_FORCE_32BIT= 是切换到64位 注意=号前后不 ...

  4. 分享一个好用的tmux配置文件

    tmux众所周知,不过多介绍,友好的tmux配置,让人用起来很舒服,分享一个tmux配置文件 # ------ general ------------------------------------ ...

  5. vue 配合vue-resource调用接口,获取数据

    1.先用node+express+mysql简单配置一下后台 const express = require('express');const mysql = require('mysql');con ...

  6. 当进行服务端渲染的时间,某些npm包可能会调用document,window这些对象而导致报错

    1.在didmount里面使用require引入 require.ensure([], (require) => { this.setState({ picker: require('./Pic ...

  7. anaconda 的安装

    进官网下载anaconda, 根据需要下载对应python版本Anaconda软件. https://www.anaconda.com/download/#windows 下载完双击 Anaconda ...

  8. node.js设置跨域

    app.all('*', function(req, res, next) { res.header("Access-Control-Allow-Origin", "*& ...

  9. 小程序wx.request的封装

    第一次做小程序项目,这个封装方法是同学推荐的一个网址,对我帮助很大,如果想看代码部分,请看网址详细介绍 网络请求都写在Page里,每个请求都要重复的写wx.request以及一些基础配置: 每个页面里 ...

  10. .net第四章内容总结

    4.2)   mdi 多文档界面 创建子窗体的childForm.text书上的做法childformnumber不存在 于是我自定义一个childforNumber起始为1: 在窗体下面显示所有已经 ...