【问题标题】:Jackson Can not deserialize instance of java.util.ArrayList out of VALUE_STRING tokenJackson 无法从 VALUE_STRING 令牌中反序列化 java.util.ArrayList 的实例
【发布时间】:2018-03-30 08:43:47
【问题描述】:

我在反序列化 JSON 字符串时遇到问题。我想我什么都试过了,但我卡住了。到目前为止,这是我的代码。马文:

    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-client</artifactId>
        <version>2.26</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.inject</groupId>
        <artifactId>jersey-hk2</artifactId>
        <version>2.26</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-json-jackson</artifactId>
        <version>2.26</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.jaxrs</groupId>
        <artifactId>jackson-jaxrs-json-provider</artifactId>
        <version>2.9.2</version>
    </dependency>

实体:

@JsonIgnoreProperties(ignoreUnknown = true)
public class ImportTask {
    @JsonProperty("ID")
    private long id;
    @JsonProperty("Name")
    private String name;
    @JsonProperty("Description")
    private String description;

    public ImportTask() {
    }

    // getters and setters
}

客户:

List<ImportTask> importTaskList = new ArrayList<ImportTask>();
ObjectMapper mapper = new ObjectMapper();
mapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
JacksonJaxbJsonProvider jacksonJaxbJsonProvider = new JacksonJaxbJsonProvider();
jacksonJaxbJsonProvider.setMapper(mapper);
Client client = ClientBuilder.newClient(new ClientConfig(jacksonJaxbJsonProvider));
Response response= client
                     .target("http://localhost:51873/api/getImportTaskList")
                     .request(MediaType.APPLICATION_JSON)
                    .get();
importTaskList = response.readEntity(new GenericType<List<ImportTask>>(){});

这是我从 web 服务获得的 JSON 字符串:

"[{\"ID\":16,\"Name\":\"name\",\"Description\":\"description\"}]"

我收到这个错误

javax.ws.rs.ProcessingException: Error reading entity from input stream.
.......

引起:com.fasterxml.jackson.databind.JsonMappingException: 可以 不在 VALUE_STRING 中反序列化 java.util.ArrayList 的实例 令牌

与作为 int 而非字符串传递的 Id 相关的错误吗? 任何帮助将不胜感激。

【问题讨论】:

  • 可能与从响应中读取实体有关,而不是与您的模型本身有关。例如,如果您从ObjectMapper 中读取来自String 的值,通过使用new TypeReference&lt;List&lt;ImportTask&gt;&gt;(){} 进行参数化,它将成功反序列化。
  • 无论出于何种原因,您的 JSON 是 JSON 字符串,而不是 JSON 数组。

标签: java json maven jackson


【解决方案1】:

Sotirios 是正确的。

问题在于 web 服务返回字符串而不是 json。

【讨论】:

    【解决方案2】:

    您返回的不是 jsonString。

    ObjectMapper mapper = new ObjectMapper();
    String jsonString = mapper.readValue("returning",String.class);
    // then,your operation...
    

    【讨论】:

      猜你喜欢
      • 2017-03-02
      • 1970-01-01
      • 2018-11-01
      • 1970-01-01
      • 2013-01-13
      • 2017-08-25
      • 2021-06-09
      • 2014-01-17
      相关资源
      最近更新 更多