2017-05-14 4 views
1

스프링 부트 웹 애플리케이션에 업로드 된 파일에 대한 정보가 기록 된 JPA 엔티티 Medium이 있습니다. Spring 데이터를 저장합니다. 사용자 정의 컨트롤러에 JPA 엔티티를 저장하고 HAL 표현을 반환합니다.

내가 일반적인 작업을 처리 할 수있는 기본 스프링 데이터 나머지 저장소가 있습니다 그러나

@RepositoryRestResource(path = "/media") 
public interface MediumRepository extends CrudRepository<Medium, Long> { 
} 

를, 내가 HTTP 다중 업로드를 사용하여 파일을 업로드 할 클라이언트가 필요합니다, 다음 Medium 기록을 작성하고 그것을 반환 응답. 응답 구조는 repository.save()과 동일해야합니다. 내가 알 수없는 것은 HATEOAS 메타 데이터를 추가하는 방법입니다. 물론, 난 그냥

return mediumRepository.save(medium); 

가 엔티티, 아니 HATEOAS의 기본 JSON 표현을 반환합니다 반환합니다. 내가 already learned이라고 말하면 아마도 PersistentEntityResourceAssembler을 사용해야합니다.

그래서, 내 현재의 컨트롤러 코드는 다음과 같습니다 그러나

@RestController 
@RequestMapping("/upload") 
public class MediaEndpoint { 

    @Autowired 
    private MediumRepository mediumRepository; 

    @RequestMapping(method = POST) 
    public PersistentEntityResource uploadMedium(
      @RequestPart MultipartFile data, 
      PersistentEntityResourceAssembler persistentEntityResourceAssembler) { 

     Medium medium = new Medium(); 
     // setup of the medium instance 
     Medium savedMedium = mediumRepository.save(medium); 
     return persistentEntityResourceAssembler.toResource(savedMedium); 
    } 
} 

, 나는 방법에 주입 된 persistentEntityResourceAssembler 얻을 수 없다 - 나는

Failed to instantiate [org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler]: No default constructor found; nested exception is java.lang.NoSuchMethodException: org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler.<init>() 

가 어떻게이 구현할 수 얻고 있습니까?

답변

0

Cepr0's answer에 따라, 나는 @RepositoryRestController 내 컨트롤러를 변경,하지만 난 RepositoryRestController@ResponseBody 주석이 없습니다 및 ResponseEntity을 반환해야 함을 found

Circular view path [upload]: would dispatch back to the current handler URL [/upload] again. 
Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, 
due to default view name generation.) 

예외를 가지고, 그래서 내 코드를 변경 다음 :

@RepositoryRestController 
@RequestMapping("/upload") 
public class MediaEndpoint { 

    @Autowired 
    private MediumRepository mediumRepository; 

    @RequestMapping(method = POST) 
    public ResponseEntity<PersistentEntityResource> uploadMedium(
      @RequestPart MultipartFile data, 
      PersistentEntityResourceAssembler persistentEntityResourceAssembler) { 

     Medium medium = new Medium(); 
     // setup of the medium instance 
     Medium savedMedium = mediumRepository.save(medium); 
     return ResponseEntity.ok(persistentEntityResourceAssembler.toResource(savedMedium)); 
    } 
} 

이렇게하면 HATEOAS 메타 데이터로 멋진 JSON 응답을 얻을 수 있습니다.

또는 방법이나 컨트롤러에 @ResponseBody으로 주석을 달아도 같은 방식으로 작동합니다.

1

@RestController 대신 @RepositoryRestController을 사용해보십시오.

+0

이것은 올바른 방향으로 나를 샀다. 나는 다른 조정을해야했고, 내 대답을 보았다. –