2015-12-15 2 views
5

Ich habe einen benutzerdefinierten Ruhe-Controller erstellt und ich kann auf die API zugreifen und das Ergebnis von der Ressource erhalten, das Problem ist, es erscheint nicht in der HAL Browser .. wie diese benutzerdefinierte Methode im HAL Browser verfügbar gemacht wird? Danke ...Spring Data Rest: So stellen Sie benutzerdefinierte Ruhe-Controller-Methode im HAL-Browser

@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); 
    } 


} 

Antwort

4

eine Bohne registrieren, die ein ResourceProcessor<RepositoryLinksResource> implementiert und Sie können Links zu Ihren benutzerdefinierten Controller an die Wurzel Ressource hinzuzufügen, und der HAL-Browser wird es sehen.

+1

Ich versuche das, und es scheitert für mich mit 'java.lang.IllegalArgumentException: 'uriTemplate' darf nicht null sein. (Ihr Code schien ein close-paren nach 'getRevisions()' zu fehlen.) –

+0

Danke Eric, ich habe den Code geändert. Was Ihr Problem betrifft - könnten Sie einen vollständigeren Stack-Trace veröffentlichen? Es ist möglich, dass Sie das beheben können, indem Sie Ihre benutzerdefinierte Controller-Klasse die ResourceProcessor-Schnittstelle anstelle einer eigenständigen Klasse implementieren - ein paar Gerüchte darüber an anderer Stelle (https://stackoverflow.com/questions/38548834/spring-hateoas- Ausnahme beim Erstellen eines neuen Links. –

+0

Nun, jetzt bin ich immer 'java.util.NoSuchElementException: Arraylist: 854 Kollektionen: 1042 ControllerLinkBuilderFactory: 139 [feder hateoas] ControllerLinkBuilder: 172 RootResourceProcessor: 22)' ', das hat resource.add (linkTo (methodOn (MeetupController.class, 2L, 3L, 2d, 2d, null, null) .finalize (2L, 3L, 2d, 2d, null, null)). withRel ("Meetups")); '(Stack abgeschnitten auf Fit in Kommentar) –