Come esporre una risorsa esterna (non gestita tramite un repository) nell'elenco root di risorse di Spring Data REST? Ho definito un controller seguendo lo schema in RestbucksCome aggiungere collegamenti alla risorsa root in Spring Data REST?
10
A
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
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;
}
}
come posso fare questo per un collegamento non controller? (in particolare voglio aggiungere il logout di sicurezza di primavera) – xenoterracide
@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
@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