Подтвердить что ты не робот

При использовании 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, потому что мое приложение позволяет пользователю выполнять поиск по этому значению.

Спасибо:)

4b9b3361

Ответ 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"
}