2016-09-07 2 views
0

У меня есть абстрактный класс и две реализации:Как создать гипермедиа ссылки в пользовательском сериализаторе с Spring Data Rest

public abstract class Attribute { 
    // some properties 
} 

public class CustomAttribute extends Attribute{ 
    private String property1; 
} 

public class DefaultAttribute extends Attribute{ 
    private String property2; 
} 

Там еще один класс, который включает в себя следующие атрибуты:

public class Step{ 
    private List<Attribute> attributes; 
} 

Теперь, когда Step сериализуется, отсутствует личная ссылка. Мне нужна собственная ссылка, так как я хочу обновлять атрибуты. Согласно документации, Джексону нужно немного помочь решить, какой класс использовать. Но это не помогает, потому что мне нужно использовать оба класса. Поэтому я создаю собственный сериализатор (и зарегистрирован в модуле) для Step, и теперь мне интересно, как я могу сам построить ссылку. Я не мог найти ничего в документах Spring Data Rest относительно этого. Поскольку Spring Data Rest автоматически добавляет эти ссылки, я думаю, что может быть доступ к информации о протоколе/имени хоста/порта в JsonSerializer. Как получить информацию в моем пользовательском сериализаторе?

ответ

1

Хорошо, теперь я использую функцию linkTo(), чтобы получить имя хоста и порт, и я вручную задал остальную часть URL-адреса ресурса в своем настраиваемом сериализаторе.

final Link attributeLink = linkTo(CustomAttributeRepository.class) 
    .slash("/api") 
    .slash("customAttributes") 
    .slash(attribute.getIdentifier()).withSelfRel(); 
//@formatter:off 
    jsonGenerator.writeFieldName("_links"); 
     jsonGenerator.writeStartObject(); 
     jsonGenerator.writeFieldName("self"); 
      jsonGenerator.writeStartObject(); 
       jsonGenerator.writeStringField("href", attributeLink.getHref()); 
      jsonGenerator.writeEndObject(); 
     jsonGenerator.writeEndObject(); 
//@formatter:on 
Смежные вопросы