2015-12-15 21 views
5

tôi đã tạo bộ điều khiển nghỉ ngơi tùy chỉnh và tôi có thể truy cập API và nhận kết quả từ tài nguyên, vấn đề là, nó không xuất hiện trong Trình duyệt HAL .. làm cách nào để hiển thị phương thức tùy chỉnh này trong Trình duyệt HAL? Cảm ơn bạn ...Nghỉ ngơi dữ liệu mùa xuân: Cách hiển thị phương pháp điều khiển nghỉ ngơi tùy chỉnh trong Trình duyệt HAL

@RepositoryRestController 
public class RevisionController { 

    protected static final Logger LOG = LoggerFactory 
      .getLogger(RevisionController.class); 

    private final DisciplineRepository repository; 

    Function<Revision<Integer, Discipline>, Discipline> functionDiscipline = new Function<Revision<Integer, Discipline>, Discipline>() { 
     @Override 
     public Discipline apply(Revision<Integer, Discipline> input) { 
      return (Discipline) input.getEntity(); 
     } 
    }; 

    @Inject 
    public RevisionController(DisciplineRepository repository) { 
     this.repository = repository; 
    } 

    @RequestMapping(method = RequestMethod.GET, value = "/disciplines/search/{id}/revisions") 
    public @ResponseBody ResponseEntity<?> getRevisions(
      @PathVariable("id") Integer id) { 

     Revisions<Integer, Discipline> revisions = repository.findRevisions(id); 

     List<Discipline> disciplines = Lists.transform(revisions.getContent(), 
       functionDiscipline); 

     Resources<Discipline> resources = new Resources<Discipline>(disciplines); 

     resources.add(linkTo(
       methodOn(RevisionController.class).getRevisions(id)) 
       .withSelfRel()); 

     return ResponseEntity.ok(resources); 
    } 


} 

Trả lời

4

Đăng ký đậu thực hiện ResourceProcessor<RepositoryLinksResource> và bạn có thể thêm liên kết vào bộ điều khiển tùy chỉnh vào tài nguyên gốc và Trình duyệt HAL sẽ nhìn thấy nó.

public class RootResourceProcessor implements ResourceProcessor<RepositoryLinksResource> { 

@Override 
public RepositoryLinksResource process(RepositoryLinksResource resource) { 
    resource.add(ControllerLinkBuilder.linkTo(ControllerLinkBuilder.methodOn(RevisionController.class).getRevisions(null).withRel("revisions"))); 
    return resource; 
    } 
} 
+1

Tôi đang thử điều đó và không thành công với 'java.lang.IllegalArgumentException: 'uriTemplate' không được rỗng'. (Mã của bạn có vẻ thiếu dấu ngoặc kép sau 'getRevisions()'.) –

+0

Cảm ơn Eric, tôi đã sửa đổi mã. Đối với vấn đề của bạn - bạn có thể đăng một dấu vết ngăn xếp hoàn chỉnh hơn không? Có thể bạn sẽ có thể khắc phục điều này bằng cách yêu cầu lớp điều khiển tùy chỉnh của bạn thực hiện giao diện ResourceProcessor thay vì một lớp độc lập - một vài rumblings về điều này ở nơi khác (https://stackoverflow.com/questions/38548834/spring-hateoas- ngoại lệ-trong-tạo-một-new-link). –

+0

Vâng, bây giờ tôi nhận được 'java.util.NoSuchElementException: ArrayList: 854 Bộ sưu tập: 1042 ControllerLinkBuilderFactory: 139 [mùa xuân-hateoas] ControllerLinkBuilder: 172 RootResourceProcessor: 22) 'mà đã' resource.add (linkTo (methodOn (MeetupController.class, 2L, 3L, 2d, 2d, null, null) .finalize (2L, 3L, 2d, 2d, null, null)). withRel ("meetups")); '(Stack cắt ngắn để phù hợp trong bình luận) –

Các vấn đề liên quan