@JsonPrpperty映射多级json对象到实体

1. 场景描述

在进行对接是上游系统发出来的数据格式是同一的无法做修改,只能是下游系统妥协,去满足其数据格式,但是又不想在定义实体和属性时很随意,这个时候就可以通过@JsonPrpperty注解实现。

2. 例子

实体定义:

  • Person3中包含Person2
  • Person2中包含Person
  • Person中是具体的属性
package com.gxn.demo.domain;

import com.fasterxml.jackson.annotation.JsonProperty;

/**
 * @author gxn
 */
public class Person3 {

    @JsonProperty(value = "data")
    private Person2 person2;

    public Person2 getPerson2() {
        return person2;
    }

    public void setPerson2(Person2 person2) {
        this.person2 = person2;
    }
}

package com.gxn.demo.domain;

import com.fasterxml.jackson.annotation.JsonProperty;

/**
 * @author gxn
 */

public class Person2 {

    @JsonProperty(value = "dataInfo")
    private Person person;

    public Person getPerson() {
        return person;
    }

    public void setPerson(Person person) {
        this.person = person;
    }
}

package com.gxn.demo.domain;


import com.fasterxml.jackson.annotation.JsonProperty;

import java.util.Objects;

/**
 * @author gxn
 */

public class Person {

    @JsonProperty(value = "name")
    private String realName;
    private Integer age;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return Objects.equals(realName, person.realName) &&
                Objects.equals(age, person.age);
    }

    @Override
    public int hashCode() {
        return Objects.hash(realName, age);
    }

    public String getRealName() {
        return realName;
    }

    public void setRealName(String realName) {
        this.realName = realName;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

Controller层:

package com.gxn.demo.controller;

import com.gxn.demo.domain.Person3;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author gxn
 */
@RestController
public class PersonController {

    @PostMapping("/name")
    public String getName(@RequestBody Person3 person3) {
        String name = person3.getPerson2().getPerson().getRealName();
        Integer age = person3.getPerson2().getPerson().getAge();
        String res = name + " : " + age;
        return res;
    }

}

body传参格式:data和dataInfo都是我们配置在注解中的

{
    "data":{
        "dataInfo":{
            "name": "我是最里层",
            "age": 10000
        }
    }
}

效果展示:已经将body中的值映射到对应实体的属性上
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值