Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Jackson解析响应_Java_Jackson_Jaxb_Jaxb2_Jackson Databind - Fatal编程技术网

Java 使用Jackson解析响应

Java 使用Jackson解析响应,java,jackson,jaxb,jaxb2,jackson-databind,Java,Jackson,Jaxb,Jaxb2,Jackson Databind,我正在尝试使用Jackson解析api响应。获取错误,如com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:无法识别的字段“Health” 我尝试过这样的选择 objectMapper.configure(SerializationFeature.WRAP_ROOT_VALUE, false); //with true 我认为这是一个简单的错误,但我无法理解。请帮忙 响应json: { "Health": {

我正在尝试使用Jackson解析api响应。获取错误,如com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:无法识别的字段“Health”

我尝试过这样的选择

objectMapper.configure(SerializationFeature.WRAP_ROOT_VALUE, false); //with true
我认为这是一个简单的错误,但我无法理解。请帮忙

响应json:

{
  "Health": {
    "id": "abc_Server",
    "name": "ABC Request Service",
    "status": "GREEN",
    "dependencies": [
      {
        "id": "DB",
        "name": "MySQL",
        "message": "Connection successful.",
        "status": "GREEN"
      }
    ]
  }
}
爪哇波乔

@JsonRootName(value = "Health")
public class HealthResponse {

  private String id;
  private String name;
  private String status;
  private List<Dependencies> dependencies;

  //getter and setter methods
  }
}


public class Dependencies {

  private String id;
  private String name;
  private String message;
  private String status;
  //getter and setter methods
}
也尝试过使用pojo,但不起作用

@JsonRootName(value = "Health")
public class Health {

  private HealthResponse health;

 //getter and setter
}

将JSON转换为Java对象时,实际上是反序列化,而不是序列化。所以用这个:

objectMapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true); 
完成当前为我工作的代码(打印abc\u服务器):

healthsresponse

@JsonRootName(value = "Health")
class HealthResponse {
    [...]
}
相关性没有变化


用于的文档。

我尝试了此操作,但出现以下错误。com.fasterxml.jackson.databind.exc.MismatchedInputException:根名称“Health”与[Source:(org.glassfish.jersey.message.internal.EntityInputStream]中[simple type,class com.xas.connector.dto.HealthResponse]的类型[simple type]的预期('HealthResponse')不匹配;行:1,列:2]适合我。不要使用外部健康类。将JsonRootName注释直接放在HealthResponse上,并从ObjectMapper读取HealthResponse。我已经用适合我的完整代码更新了答案。如果它仍然不适用于您:a)检查您实际获得的json是否与您在问题中发布的内容相同,b)发布您的jackson版本,以便我可以尝试使用它进行复制。我的版本是2.8.5。也许您也可以尝试升级到该版本。我猜InputStream response=xxx objectMapper.readValue(response,xyz)可能有问题。我必须检查这个。尝试将inputstream导出为字符串,打印字符串并将字符串传递给ObjectMapper,而不是inputstream。
    String json="{\"Health\":{\"id\":\"abc_Server\",\"name\":\"ABCRequestService\",\"status\":\"GREEN\",\"dependencies\":[{\"id\":\"DB\",\"name\":\"MySQL\",\"message\":\"Connectionsuccessful.\",\"status\":\"GREEN\"}]}}";

    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
    try {
        HealthResponse healthResponse = objectMapper.readValue(json, HealthResponse.class);
        System.out.println(healthResponse.getId());
    } catch (Exception e) {
        e.printStackTrace();
    }
@JsonRootName(value = "Health")
class HealthResponse {
    [...]
}