2014-04-17 12 views

risposta

14

Questo può essere fatto implementando ResourceProcessor<RepositoryLinksResource>.

seguito frammento di codice aggiunge "/ altri" alla lista radice

@Controller 
@ExposesResourceFor(Other.class) 
@RequestMapping("/others") 
public class CustomRootController implements 
     ResourceProcessor<RepositoryLinksResource> { 

    @ResponseBody 
    @RequestMapping(method = RequestMethod.GET) 
    public ResponseEntity<Resources<Resource<Other>>> listEntities(
      Pageable pageable) throws ResourceNotFoundException { 
      //... do what needs to be done 
    } 

    @Override 
    public RepositoryLinksResource process(RepositoryLinksResource resource) { 
     resource.add(ControllerLinkBuilder.linkTo(CustomRootController.class).withRel("others")); 

     return resource; 
    } 
} 

dovrebbe aggiungere

{ 
    "rel": "others", 
    "href": "http://localhost:8080/api/others" 
} 

al tuo annuncio radice collega

+1

come posso fare questo per un collegamento non controller? (in particolare voglio aggiungere il logout di sicurezza di primavera) – xenoterracide

+0

@xenoterracide magari con un '@RequestMapping ("/logout ")' sul controller e poi un '@RequestMapping (metodo = RequestMethod.POST) public logout() {// do logout} 'metodo. Cosa intendi per link non controller? – aycanadal

+0

@aycanadal Sono abbastanza sicuro di averlo capito a un certo punto, ma ho un filtro a cui devo collegarmi perché, la sicurezza di primavera – xenoterracide

0

Sono stato alla ricerca di una risposta alla stesso problema, ma la chiave è: non ho un controller. Il mio url indica qualcosa creato in un filtro di autenticazione. Ciò che ha funzionato per me è creare un RootController che non abbia metodi e utilizzarlo per creare collegamenti nell'implementazione ResourceProcessor.

@RestController 
@RequestMapping("/") 
public class RootController {} 

Quindi il collegamento viene inserito utilizzando il controller vuoto.

@Component 
public class AuthLinkProcessor implements ResourceProcessor<RepositoryLinksResource> { 

    @Override 
    public RepositoryLinksResource process(RepositoryLinksResource resource) { 
     resource.add(
       linkTo(RootController.class) 
       .slash("auth/login") 
       .withRel("auth-login")); 
     return resource; 
    } 
} 
Problemi correlati