Разбор ответа с использованием Джексона - PullRequest
0 голосов
/ 12 мая 2018

Я пытаюсь разобрать ответ API, используя Джексона. получение ошибок типа com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: нераспознанное поле «Здоровье»

Я пробовал варианты, такие как

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

Java Pojos

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

основной класс:

ObjectMapper objectMapper = new ObjectMapper();
try {
InputStream response = healthCheckWebTarget.request(MediaType.APPLICATION_JSON).get(InputStream.class);
HealthResponse healthResponse = objectMapper.readValue(response, HealthResponse.class);
}catch(Exception e){
  //
}

Также пытался иметь pojo с, но не работал

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

  private HealthResponse health;

 //getter and setter
}

1 Ответ

0 голосов
/ 12 мая 2018

При преобразовании JSON в объект Java вы фактически десериализуете, а не сериализуете. Так что используйте это:

objectMapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true); 

Полный код, который сейчас работает для меня (печатает abc_Server):

    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();
    }

А HealthResponse:

@JsonRootName(value = "Health")
class HealthResponse {
    [...]
}

Без изменений Dependencies

Документация для UNWRAP_ROOT_VALUE .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...