При использовании Spring Data Rest после переноса приложения на Spring Boot я заметил, что свойства объекта с @Id больше не сортируются в JSON
Этот вопрос связан с этим вопросом SO (Spring boot @ResponseBody не сериализует идентификатор объекта). Я заметил, что после переноса приложения на Spring Boot и использования зависимостей spring -boot-starter-data-rest, мои сущности @Id поля больше не сортируются в результате JSON.
Это мое сопоставление запросов и во время отладки, я вижу, что данные не изменяются до их возвращения, поэтому позже свойства @Id удаляются.
@RequestMapping(method = RequestMethod.GET, produces = {"application/json"})
public PagedResources<Receipt> receipts(Pageable pageable, PagedResourcesAssembler assembler) {
Page<Receipt> receipts = receiptRepository.findByStorerAndCreatedDateGreaterThanEqual("003845", createdStartDate, pageable);
PagedResources<Receipt> pagedResources = assembler.toResource(receipts, receiptResourceAssembler);
return pagedResources;
}
Есть ли параметр, который позволил бы мне сохранить поле @Id в результате JSON, потому что мое приложение позволяет пользователю выполнять поиск по этому значению.
Спасибо:)
Ответы
Ответ 1
По умолчанию Spring Data Rest не выставляет идентификаторы. Однако вы можете выборочно включить его с помощью метода exposeIdsFor (..). Вы можете сделать это в конфигурации, что-то вроде этого
@Configuration
public static class RepositoryConfig extends
RepositoryRestMvcConfiguration {
@Override
protected void configureRepositoryRestConfiguration(
RepositoryRestConfiguration config) {
config.exposeIdsFor(Class1.class, Class2.class);
}
}
Ответ 2
Как и для Spring Data Rest 2.4 (который является транзитивной зависимостью при использовании spring -boot 1.3.0.M5), вы можете использовать RepositoryRestConfigurerAdapter. Например,
@Configuration
class SpringDataRestConfig {
@Bean
public RepositoryRestConfigurer repositoryRestConfigurer() {
return new RepositoryRestConfigurerAdapter() {
@Override
public void configureRepositoryRestConfiguration(
RepositoryRestConfiguration config) {
config.exposeIdsFor(Class1.class, Class2.class);
}
}
}
}
Ответ 3
Чтобы открыть Id
, пожалуйста, прочитайте https://github.com/spring-projects/spring-hateoas/issues/66
В REST идентификатор ресурса является его URI
https://github.com/spring-projects/spring-hateoas/issues/66#issuecomment-34968272
Клиент явно не использует идентификатор для создания URL-адреса. Например, вы можете заменить свой идентификатор для uuid. Или даже изменить схему URL.
И вот пример приложения работы с гипермедией и ссылками: https://github.com/spring-projects/spring-hateoas/issues/66#issuecomment-62175087
Ответ 4
@Id аннотация в вашем классе модели делает магию.
public class Location {
@Id
private String woeid;
private String locationName;
Тогда ваш объект mongo будет выглядеть следующим образом:
{
"_id" : "2487889",
"_class" : "com.agilisys.weatherdashboard.Location",
"locationName" : "San Diego, CA"
}