Если вы хотите добавить все поля News, вы можете манипулировать возвращаемым объектом ResponseEntity . Так что я изменился с этим кодом, можете ли вы применить к своему коду?
NewsResourceAssembler.class
должно быть как;
@Service
public class NewsResourceAssembler implements ResourceAssembler<News, Resource<NewsResource>> {
private EntityLinks entityLinks;
@Autowired
public void setEntityLinks(EntityLinks entityLinks) {
this.entityLinks = entityLinks;
}
@Override
public Resource<NewsResource> toResource(News news) {
Link self = entityLinks.linkFor(News.class).slash(news.getId()).withSelfRel();
Link newsTags = entityLinks.linkFor(News.class).slash(news.getId()).slash("newsTags").withRel("newsTags");
Link newsComments = entityLinks.linkFor(News.class).slash(news.getId()).slash("newsComments").withRel("newsComments");
final NewsResource newsResource = new NewsResource();
//set any fields to which do you wants to send client
//newsResource.setExampleFields();
//newsResource.setNewsTagList(news.getNewsTag()); //example code. Change according to your models
return new Resource(newsResource, self, newsTags, newsComments);
}
}
Теперь вам нужно NewsResource.class
, так что это должно быть так;
@JsonIgnoreProperties(ignoreUnknown = true)
public class NewsResource extends ResourceSupport {
//private fields of which do you wants
//dont forget list of newstag field
//ex : private List<NewsTagFields> newsTag = new ArrayList<>();
//Also should write getter and setter methods
}
PS: не забывайте правила закомментированной строки. В соответствии с этим изменением ваш клиент должен проанализировать входящий ответ клиенту. Потому что в ответ некоторые ссылки rel должны быть изменены на основной объект. Но ваши пользовательские параметры не изменились.
РЕДАКТИРОВАТЬ:
Если в вашем NewsResource.class
-> поле newsTag
должно быть как ( Пожалуйста, не забудьте установить все теги в вашем классе ассемблера ресурсов! );
private List<NewsTagFields> newsTag = new ArrayList<>();
А теперь вам нужно NewsTagFields.class. Также вы можете использовать этот класс;
public class NewsTagFields {
private final String id;
private final String name;
public NewsTagFields(String id, String name) {
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public String getName() {
return name;
}
}
И, наконец, добавьте этот код в ResourceAssembler
, чтобы добавить новый список NewsTagFields;
( Этот код обеспечивает получение всех newsTag и преобразование в список NewsTagFields полностью. И добавление к newsResource для отправки клиенту )
final List<NewsTagFields> allNewsTag =
news.getNewsTag().stream()
.map(newsTag -> new NewsTagFields(newsTag.getId(), newsTag.getName()))
.collect(Collectors.toList());
newsResource.setNewsTagList(allNewsTag);