【问题标题】:JSON parse error: Cannot construct instance of `org.test.dtos.TestChild` (although at least one Creator exists)JSON 解析错误:无法构造 `org.test.dtos.TestChild` 的实例(尽管至少存在一个 Creator)
【发布时间】:2020-01-28 15:47:58
【问题描述】:

我遇到了一个错误

2020-01-28 18:19:21,311 DEBUG [http-nio-8069-exec-8] ServletInvocableHandlerMethod : Could not resolve parameter [0] in public org.springframework.http.ResponseEntity<org.test.dtos.TestResponse> org.test.controllers.TestController.testRoute(org.test.dtos.TestRequest): JSON parse error: Cannot construct instance of `org.test.dtos.TestChild` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('0'); nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `org.test.dtos.TestChild` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('0')
 at [Source: (PushbackInputStream); line: 5, column: 18] (through reference chain: org.test.dtos.TestRequest["children"]->org.test.dtos.TestChildWrapper["child"]->java.util.HashSet[0])
2020-01-28 18:19:21,314 WARN  [http-nio-8069-exec-8] DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot construct instance of `org.test.dtos.TestChild` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('0'); nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `org.test.dtos.TestChild` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('0')
 at [Source: (PushbackInputStream); line: 5, column: 18] (through reference chain: org.test.dtos.TestRequest["children"]->org.test.dtos.TestChildWrapper["child"]->java.util.HashSet[0])]

发送时:

<?xml version="1.0" encoding="UTF-8"?>
<TestRequest>
    <children>
        <child>
            <childStuffA>0</childStuffA>
            <childStuffB>0</childStuffB>
            <childStuffC>string</childStuffC>
        </child>
    </children>
    <doubleProperty>0</doubleProperty>
    <id>0</id>
    <longProperty>0</longProperty>
    <stringProperty>string</stringProperty>
</TestRequest>

到路线/test/api/apply

我在 GitHub 上针对特定问题编写了一个示例代码。

我正在使用 Spring boot 2.2.4-RELEASE 和 Spring Cloud Hoxton.SR1,你可以在那边拿到 pom。 https://github.com/cmeon/spring-issue-test/tree/master

【问题讨论】:

    标签: spring-boot jackson jackson-dataformat-xml


    【解决方案1】:

    好的,我在 github 中检查了您的代码并发现了问题,因此当您尝试反序列化 Collections 时,您必须使用 @JacksonXmlElementWrapper 提及该属性。

    像下面这样添加它

    TestChildWrapper.class

    import java.io.Serializable;
    import java.util.HashSet;
    import java.util.Set;
    
    import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
    import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    @AllArgsConstructor
    @Data
    @NoArgsConstructor
    public class TestChildWrapper implements Serializable {
    
      private static final long serialVersionUID = 1L;
    
      @JacksonXmlProperty(localName = "child")
      @JacksonXmlElementWrapper(useWrapping = false)
      private Set<TestChild> child = new HashSet<>();
    }
    
    

    有效..

    【讨论】:

      猜你喜欢
      • 2020-06-14
      • 2020-01-17
      • 2019-07-28
      • 2019-06-01
      • 2021-01-30
      • 2018-01-17
      • 2019-04-01
      • 2018-07-05
      • 2022-12-12
      相关资源
      最近更新 更多