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中的值映射到对应实体的属性上