2014-09-11 15 views
26

Lassen Sie uns sagen, ich habe zwei Repositories:Benutzerdefinierte Antwort für root Anfrage int Früjahr REST HATEOAS sowohl mit RepositoryRestResource-s und regelmäßige Controller

@RepositoryRestResource(collectionResourceRel = "person", path = "person") 
public interface PersonRepository extends PagingAndSortingRepository<Person, Long> { 
    List<Person> findByLastName(@Param("name") String name); 
} 

und

@RepositoryRestResource(collectionResourceRel = "person1", path = "person1") 
public interface PersonRepository1 extends PagingAndSortingRepository<Person1, Long> { 
    List<Person1> findByLastName(@Param("name") String name); 
} 

mit einem regelmäßigen Controller:

@Controller 
public class HelloController { 
    @RequestMapping("/hello") 
    @ResponseBody 
    public HttpEntity<Hello> hello(@RequestParam(value = "name", required = false, defaultValue = "World") String name) { 
     Hello hello = new Hello(String.format("Hello, %s!", name)); 
     hello.add(linkTo(methodOn(HelloController.class).hello(name)).withSelfRel()); 
     return new ResponseEntity<>(hello, HttpStatus.OK); 
    } 
} 

Jetzt ist eine Antwort für http://localhost:8080/:

{ 
    "_links" : { 
    "person" : { 
     "href" : "http://localhost:8080/person{?page,size,sort}", 
     "templated" : true 
    }, 
    "person1" : { 
     "href" : "http://localhost:8080/person1{?page,size,sort}", 
     "templated" : true 
    } 
    } 
} 

aber ich möchte so etwas bekommen:

{ 
    "_links" : { 
    "person" : { 
     "href" : "http://localhost:8080/person{?page,size,sort}", 
     "templated" : true 
    }, 
    "person1" : { 
     "href" : "http://localhost:8080/person1{?page,size,sort}", 
     "templated" : true 
    }, 
    "hello" : { 
     "href" : "http://localhost:8080/hello?name=World" 
    } 
    } 
} 

Antwort

29
@Component 
public class HelloResourceProcessor implements ResourceProcessor<RepositoryLinksResource> { 

    @Override 
    public RepositoryLinksResource process(RepositoryLinksResource resource) { 
     resource.add(ControllerLinkBuilder.linkTo(HelloController.class).withRel("hello")); 
     return resource; 
    } 
} 

basierend auf

1

Sie benötigen einen ResourceProcessory für Ihre Person Ressource als Bean registriert haben. siehe https://stackoverflow.com/a/24660635/442773

+2

Aber ich will nicht Antwort für alle 'http ändern: // localhost: 8080/person' , 'http: // localhost: 8080/person1' oder' http: // localhost: 8080/hallo' Anfragen. Ich möchte die automatisch generierte Antwort für "http: // localhost: 8080 /' request "ändern. – jcoig