当前位置: 首页 > 知识库问答 >
问题:

在嵌套对象中使用具有相同属性名的Jackson反序列化的Spring-data-rest POST

宋飞掣
2023-03-14

我使用的是spring-boot-starter-parent 1.3.3和jackson-core-asl:jar:1.9.2。我无法创建与person关联的对象(组),因为组是用person名称创建的。回复如下…

{
"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"
  } ]
}

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中,那么一切工作都很好。

@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;

此外,如果我使用@restResource(export=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,Column:19](通过引用链:xx.xxx.group[\“Person\”])“},”消息“:”无法读取文档:无法从字符串值('http://localhost:8080/Persons/1')实例化类型[简单类型,类xx.xxx.Person]的值;没有单字符串构造函数/工厂方法\n在[源:org.apache.catalina.connector.coyoteInputStream@64bf4540;行:18,Column:19]

请提供您的想法。

共有1个答案

傅乐湛
2023-03-14

在Person.java中勾选类名,类名为Group而不是personer

公共类组实现Serializable{

 类似资料:
  • 我正试图找到一种方法来使用jackson的多态反序列化功能,它将基于嵌套在标头/控件对象中的属性反序列化我的对象: JSON 1-类别1: JSON 2-类别2 父类(类似这样的注释) 子类 jackson中是否有现成的功能可以让我进行这种反序列化,或者我遗漏了什么?

  • 问题内容: 我有一个REST API,它返回JSON响应为: 有时它返回: 我有一个像这样的POJO: 那么,有没有一种方法(不是写你自己的其他 自定义解串器 中)Jackson2,这将有助于我映射在JSON来时,它的A型和类型时,它是一个JSON对象? 或者换句话说,在Jackson中,有没有一种方法可以按变量而不是by 映射? 问题答案: 我可以建议您像这样使用JsonNode: 或像这样 :

  • 但它返回一个id为空且产品为空的对象。当然,我不需要为这个简单的操作编写自定义的吗?

  • 我对对象接口的jackson序列化有问题。 我有课 哪个实现 还有上课 哪个实现 上课 我要和Jackson连载Container得到结果 但事实上我得到了结果 尽管我在映射中指定了点的序列化类型(),但在嵌套对象“point”中具有属性“name”。接口点视图没有方法getName,但结果中存在点的字段“name”。 若我从类容器中的方法getMap中删除注释(),我将得到结果 现在点没有属性"

  • 如何使用多态反序列化和嵌套类型信息属性反序列化它?我在中使用嵌套属性,如下所示: 鉴于config Jackson抱怨无法找到属性:

  • 考虑: 如果我们序列化Foo(),输出是: 我想要: 最干净的方法是什么?