POJO для JSON со смешанными типами в одном массиве - PullRequest
0 голосов
/ 12 июня 2018

Я использую Spring Boot с Джексоном.У меня есть необычный набор JSON от Elasticsearch (spring-data -asticsearch), который мне нужно прочитать в POJO.

 {  
   "thread_name":"main",
   "sort":[  
       1522270372773,
       "log#AWJuYn7SAKReCIGzMYda"
   ]
 }

Примечательно, что массив «sort» содержит число, а затем строку.Мне не повезло, что Java pojo сделал для этого правильно.Правильным ли подходом было бы объявить «сортировку» как массив объектов?И как выглядит конструктор?


Обновление от 6/6/18:

Добавление дополнительного кода по запросу:

 import java.util.List;

 import org.springframework.data.annotation.Id;
 import org.springframework.data.elasticsearch.annotations.Document;
 import org.springframework.data.elasticsearch.annotations.Field;
 import org.springframework.data.elasticsearch.annotations.FieldType;

 import com.fasterxml.jackson.annotation.JsonProperty;

 @Document(indexName = "logstash-*", type="log")
 public class LogEntry {

@Id
private String id;

@JsonProperty("level")
private String level;

@JsonProperty("level_value")
private Integer levelValue;

@JsonProperty("host")
private String host;

@JsonProperty("cluster")
private String cluster;

@Field(type = FieldType.Nested)
@JsonProperty("@timestamp")
private String timestamp;

private String message;

@JsonProperty("application_name")
private String applicationName;

@JsonProperty("application_version")
private String applicationVersion;

@JsonProperty("thread_name")
private String threadName;

@JsonProperty("stack_trace")
private String stackTrace;

@JsonProperty("logger_name")
private String loggerName;

@JsonProperty("sort")
private List<Object> sort;

<truncated generic getters/setters>
 }

Вот драйверкоторый воспроизводит ноль:

import java.io.IOException;

import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.perspectium.elasticsearch.entities.LogEntry;

public class Test {

private static String RESPONSE = "{\n" + 
        "          \"@timestamp\": \"2018-03-28T20:52:52.773Z\",\n" + 
        "          \"application_name\": \"bleah-server\",\n" + 
        "          \"level_value\": 400,\n" + 
        "          \"thread_name\": \"main\",\n" + 
        "          \"host\": \"df58952e2cb9\",\n" + 
        "          \"logger_name\": \"com.bleah.Manager\",\n" + 
        "          \"application_version\": \"7.77.0-SNAPSHOT\"\n" + 
        "        },\n" + 
        "        \"sort\": [\n" + 
        "          1522270372773,\n" + 
        "          \"log#AWJuYn7SAKReCIGzMYda\"\n" + 
        "        ]\n" + 
        "      }";

public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {

    System.out.println("Start");
    ObjectMapper objectMapper = new ObjectMapper();
    LogEntry logEntry = objectMapper.readValue(RESPONSE.getBytes(), LogEntry.class);
    System.out.println(objectMapper.writeValueAsString(logEntry));
    System.out.println("Finish.");
}

}

...