相关疑难解决方法(0)

杰克逊 - 将值传递给JsonDeserializer

我有一个现有的类层次结构,如下所示:

public interface Service {
  String getId();
  String getName();
}

public class FooTask extends AbstractTask {
  private final static ObjectMapper JSON_MAPPER = new ObjectMapper();

  static {
    JSON_MAPPER.registerModule(new SimpleModule().addDeserializer(Result.class, new ResultDeserializer());
  }

  public FooTask(Service service) {
    super(service);
  }

  @Override public Result call() throws Exception {
     InputStream json = <... execute some code to retrieve JSON ...>
     Result result = JSON_MAPPER.readValue(json, Result.class);
  }

  private static class ResultDeserializer {
    @Override public Result deserialize(JsonParser parser, DeserializationContext ctx) throws IOException {

      //
      // Need to …
Run Code Online (Sandbox Code Playgroud)

java json jackson

2
推荐指数
1
解决办法
2126
查看次数

如何用jackson传递构造函数的参数?

我正在尝试使用 Jackson 对对象进行去锡化

this.prepareCustomMapper().readValue(response.getBody(), EmailResponse.class);
Run Code Online (Sandbox Code Playgroud)

我有这个例外:

org.codehaus.jackson.map.JsonMappingException: No suitable constructor found for type [simple type, class com.despegar.social.automation.services.emailservice.response.EmailResponse]: can not instantiate from JSON object (need to add/enable type information?)
 at [Source: java.io.StringReader@4f38f663; line: 1, column: 12] (through reference chain: com.despegar.social.automation.services.emailservice.response.EmailsResponse["items"])
    at org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:163)
    at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObjectUsingNonDefault(BeanDeserializer.java:746)
    at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:683)
    at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:580)
    at org.codehaus.jackson.map.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:217)
Run Code Online (Sandbox Code Playgroud)

我知道这是因为这是我的构造函数:

public class EmailResponse extends MyServiceResponse {

    private String id;
    private String user_id;
    private String email;
    private Boolean is_primary;
    private Boolean is_confirmed;

    public EmailResponse(HttpResponse request) {
        super(request);
    }
}
Run Code Online (Sandbox Code Playgroud)

所以,我的构造函数收到 HttpResponse …

java mapping serialization json jackson

2
推荐指数
2
解决办法
9304
查看次数

标签 统计

jackson ×2

java ×2

json ×2

mapping ×1

serialization ×1