복붙노트

[SPRING] 앱을 Spring Boot로 마이그레이션 한 후 Spring Data Rest를 사용하는 동안 @Id를 사용하는 엔티티 속성이 더 이상 JSON에 마샬링되지 않는다는 것을 관찰했다.

SPRING

앱을 Spring Boot로 마이그레이션 한 후 Spring Data Rest를 사용하는 동안 @Id를 사용하는 엔티티 속성이 더 이상 JSON에 마샬링되지 않는다는 것을 관찰했다.

이 질문은이 SO 질문과 관련이 있습니다 (스프링 부트 @ResponseBody는 엔티티 ID를 직렬화하지 않습니다). 나는 Spring Boot로 app을 마이그레이션하고 spring-boot-startter-data-rest 의존성을 사용한 후에, 내 entity @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;
}

내 애플 리케이션은 사용자가 그 값으로 검색 할 수 있기 때문에 결과 JSON에 @Id 필드를 유지할 수있는 설정이 있는가?

감사 :)

해결법

  1. ==============================

    1.기본적으로 Spring Data Rest는 ID를 유출하지 않습니다. 그러나 exposeIdsFor (..) 메소드를 통해 선택적으로 활성화 할 수 있습니다. 구성에서이 작업을 수행 할 수 있습니다.

    기본적으로 Spring Data Rest는 ID를 유출하지 않습니다. 그러나 exposeIdsFor (..) 메소드를 통해 선택적으로 활성화 할 수 있습니다. 구성에서이 작업을 수행 할 수 있습니다.

    @Configuration
    public static class RepositoryConfig extends
            RepositoryRestMvcConfiguration {
    
        @Override
        protected void configureRepositoryRestConfiguration(
                RepositoryRestConfiguration config) {
            config.exposeIdsFor(Class1.class, Class2.class);
        }
    }
    
  2. ==============================

    2.Spring Data Rest 2.4 (Spring-boot 1.3.0.M5를 사용하는 경우 전이 종속성)에서 RepositoryRestConfigurerAdapter를 사용할 수 있습니다. 예를 들어,

    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. ==============================

    3.ID를 노출하기 전에 다음 주소를 읽으십시오. https://github.com/spring-projects/spring-hateoas/issues/66

    ID를 노출하기 전에 다음 주소를 읽으십시오. https://github.com/spring-projects/spring-hateoas/issues/66

  4. ==============================

    4.모델 클래스의 @ 주석은 마술을합니다.

    모델 클래스의 @ 주석은 마술을합니다.

    public class Location {
    
        @Id
        private String woeid;
        private String locationName;
    

    그러면 mongo 객체는 다음과 같이 보일 것입니다 :

    {
        "_id" : "2487889",
        "_class" : "com.agilisys.weatherdashboard.Location",
        "locationName" : "San Diego, CA"
    }
    
  5. ==============================

    5.놓다 @getter, @setters 그리고 json 결과에 노출 될 것이므로 도움이 되길 바랍니다.

    놓다 @getter, @setters 그리고 json 결과에 노출 될 것이므로 도움이 되길 바랍니다.

  6. from https://stackoverflow.com/questions/24936636/while-using-spring-data-rest-after-migrating-an-app-to-spring-boot-i-have-obser by cc-by-sa and MIT license