@JSONField使用


參考博客: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);
    }
}
View Code

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

這樣能收到了:

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字段沒有被序列化:

 

 

-----

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM