在嵌套对象中使用具有相同属性名称的Jackson Deserialization进行Spring-data-rest POST

时间:2016-12-26 13:16:07

标签: java spring-boot jackson spring-data-rest mockmvc

我使用的是spring-boot-starter-parent 1.3.3和jackson-core-asl:jar:1.9.2。我无法创建与其关联的人的对象(组),因为该组是使用人名创建的。回复喜欢以下内容..

e.g 请求:

{
"name": "Students"
"person": {"id": 1, "name: "John"}
}

响应:

{
  "id" : 1,
  "name" : "John",
  "content" : [ ],
  "links" : [ {
    "rel" : "self",
    "href" : "http://localhost/Group/1"
  }, {
    "rel" : "person",
    "href" : "http://localhost/Group/1/person"
  } ]
}

在上述回复中,使用人名“John”创建了组(名称:“学生”)。

Person.java

@Table(name = "person")
public class Person implements Serializable {

    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)
    private int id;
    private String name;


    //getter & setter

Group.java

@Table(name = "group")
public class Group implements Serializable {

    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)
    private int id;
    private String name;
    @ManyToOne
    @JoinColumn(name = "person_id")
    private Person person;


    //getter & setter

如果我将@JsonProperty()放在Group.java中,一切正常。

e.g

Group.java

@Table(name = "group")
public class Group implements Serializable {

    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)
    private int id;
    private String name;
    @ManyToOne
    @JoinColumn(name = "person_id")
    @JsonProperty("person") // why this is needed??
    private Person person;

默认的json属性与字段名称相同,那么为什么需要这个@JsonProperty注释呢?

对象映射器中是否存在解决此问题的配置?

如果我把@RestResource(exported = false)代替“@JsonProperty”,它在测试用例中工作正常,但无法通过swaggerUI创建。

收到以下错误..

  

{“cause”:{       “cause”:null,       “message”:“无法从字符串值('http://localhost:8080/persons/1')实例化类型[simple type,class xx.xxx.Person]的值;   没有单字符串构造函数/工厂方法\ n在[来源:   org.apache.catalina.connector.CoyoteInputStream@64bf4540;行:18,   专栏:19](通过参考链:xx.xxx.Group [\“person \”])“},   “message”:“无法读取文档:无法实例化类型的值   [简单类型,类xx.xxx.Person]来自String值   ( 'http://localhost:8080/persons/1');没有单一字符串   构造函数/工厂方法\ n在[来源:   org.apache.catalina.connector.CoyoteInputStream@64bf4540;行:18,   专栏:19](通过参考链:   xx.xxx [\ “人\”])。嵌套   异常是com.fasterxml.jackson.databind.JsonMappingException:可以   不实例化类型[simple type,class xx.xx.Person]的值   字符串值('http://localhost:8080/persons/1');没有单一字符串   构造函数/工厂方法\ n在[来源:   org.apache.catalina.connector.CoyoteInputStream@64bf4540;行:18,   column:19](通过参考链:xx.xxx.Group [\“person \”])“}

请提供您的想法。

1 个答案:

答案 0 :(得分:0)

检查Person.java中的类名,类名是Group而不是Person

  

public class Group 实现Serializable {