Использование @JsonSerialize скрывает ссылки HATEOAS в Spring Data REST - PullRequest
0 голосов
/ 16 октября 2018

Я использую Spring Boot 2.x, Spring Data REST, Spring HATEOAS.У меня есть простой bean-компонент:

@Entity
public class Printer extends AbstractEntity {

    @NotBlank
    @Column(nullable = false)
    private String name;

    // Ip address or hostname
    @NotBlank
    @Column(nullable = false)
    private String remoteAddress;

    @NotNull
    @Enumerated(EnumType.STRING)
    @Column(nullable = false)
    @JsonSerialize(using = PrinterModelSerializer.class)
    private PrinterModel model;

    @NotNull
    @Column(nullable = false, columnDefinition = "BIT DEFAULT 0")
    private boolean ssl = false;

    // The store where the device is connected
    @ManyToOne(fetch = FetchType.LAZY, optional = false)
    private Store store;

Я добавил собственный сериализатор для перечисления PrinterModel:

public class PrinterModelSerializer extends JsonSerializer<PrinterModel> {

    @Override
    public void serialize(PrinterModel value, JsonGenerator gen, SerializerProvider serializers) throws IOException {

        gen.writeStartObject(); // {

        gen.writeStringField("key", value.toString());
        gen.writeStringField("name", value.getName());
        gen.writeBooleanField("fiscal", value.isFiscal());
        gen.writeStringField("imageUrl", value.getImageUrl());

        gen.writeEndObject(); // }

        gen.close();

    }

}

Когда я получаю принтер ресурсов с использованием репозиториев Spring Data REST, я 've:

{
  "sid" : "",
  "createdBy" : "admin",
  "createdDate" : "2018-10-16T12:29:24Z",
  "lastModifiedDate" : "2018-10-16T14:12:08.671566Z",
  "lastModifiedBy" : "ab48d95f-09f3-40ba-b8ba-e6fd206a2fe6",
  "createdByName" : null,
  "lastModifiedByName" : null,
  "name" : "m30",
  "remoteAddress" : "111.222.333.456",
  "model" : {
    "key" : "EPSON_M30",
    "name" : "Epson TM-m30",
    "fiscal" : false,
    "imageUrl" : "https://www.epson.it/files/assets/converted/550m-550m/0/0/1/d/001d0815_pictures_hires_en_int_tm-m30_w_frontpaperloading_paper.tif.jpg"
  }
}

Как видите, у меня нет ссылок на HATEOAS.Если вместо этого я удалю свой пользовательский сериализатор, у меня будет правильный ответ:

{
  "sid" : "",
  "createdBy" : "admin",
  "createdDate" : "2018-10-16T12:29:24Z",
  "lastModifiedDate" : "2018-10-16T14:12:08.671566Z",
  "lastModifiedBy" : "ab48d95f-09f3-40ba-b8ba-e6fd206a2fe6",
  "createdByName" : null,
  "lastModifiedByName" : null,
  "name" : "m30",
  "remoteAddress" : "111.222.333.456",
  "model" : "EPSON_M30",
  "ssl" : true,
  "_links" : {
    "self" : {
      "href" : "http://x.x.x.x:8082/api/v1/printers/3"
    },
    "printer" : {
      "href" : "http://x.x.x.x:8082/api/v1/printers/3{?projection}",
      "templated" : true
    },
    "store" : {
      "href" : "http://x.x.x.x:8082/api/v1/printers/3/store{?projection}",
      "templated" : true
    }
  }
}

Как я могу запретить @JsonSerialize разорвать ссылки HATEOAS?

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