Изменить структуру по умолчанию JSON, возвращенную из контроллера Java - PullRequest
0 голосов
/ 06 апреля 2019

У меня есть контроллер, который возвращает список объектов в виде ResponseEntity, JSON возвращается в следующем формате:

[
  {
    “name”:”a”,
    “classes”:
    [
        “1”,”2”,”3”
    ]
  }]

Я хочу реструктурировать его в следующем формате:

[{“a”:[“1”,”2”,”3”]}]

У меня есть догадка, что я должен сделать свой собственный JSON Object и вернуть его некоторым аннотированным методом @JsonValue, но я не хочу этого делать.

Есть ли другой способ?

1 Ответ

0 голосов
/ 06 апреля 2019

У вас есть две опции:

  1. Преобразование объекта в список Map -s в правильной структуре.
  2. Запись собственного сериализатора.

Пользовательский сериализатор должен быть простым в этом случае:

class PojoSerializer extends JsonSerializer<Pojo> {

    @Override
    public void serialize(Pojo value, JsonGenerator gen, SerializerProvider provider) throws IOException {
        gen.writeStartObject();
        gen.writeObjectField(value.getName(), value.getClasses());
        gen.writeEndObject();
    }
}

И простым использованием:

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;

import java.io.IOException;
import java.util.Arrays;
import java.util.List;

public class JsonApp {

    public static void main(String[] args) throws Exception {
        ObjectMapper mapper = new ObjectMapper();
        mapper.enable(SerializationFeature.INDENT_OUTPUT);
        mapper.writeValue(System.out, Arrays.asList(new Pojo(), new Pojo()));
    }
}

@JsonSerialize(using = PojoSerializer.class)
class Pojo {
    private String name = "a";
    private List<String> classes = Arrays.asList("1", "2", "3");

    // getters, setters
}

Отпечатки:

[ {
  "a" : [ "1", "2", "3" ]
}, {
  "a" : [ "1", "2", "3" ]
} ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...