@JSONField使用

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

1.常常遇到這種狀況,傳過來json的key名和咱們javaBean的屬性名不同,致使接收不到:java

Child類用來接收傳過來的json串:web

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);
    }
}
View Code

Controller來接收json串:spring

發送的json串:apache

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);
    }
}

打印出來,看到是收不到的:json

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

 

2.對於這種@RequestBody的使用@JsonProperty將傳過來的json key名可以映射到javaBean上:ide

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);
    }
}
View Code

這樣能收到了:ui

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);
    }
}
View Code

咱們能夠看到childFather字段沒有被序列化:

 

 

-----

相關文章
相關標籤/搜索