Sto usando mvc a molla, hateoas. Ho un'azione controller simile aCome creare il link che punta all'azione del controller Spring che restituisce il vuoto
@RequestMapping(value = "/images/{userId}/{publicUrl}/{fileName:.+}", method = RequestMethod.GET)
public void image(@PathVariable Integer userId, @PathVariable String publicUrl, @PathVariable String fileName, HttpServletRequest request, HttpServletResponse response) throws Exception {
try(HellodoxAws aws = haws;){
.....
.....
response.setContentType(image.getObjectMetadata().getContentType());
response.setHeader("ETag",image.getObjectMetadata().getETag());
response.setHeader("Cache-Control",image.getObjectMetadata().getCacheControl());
response.setHeader("Last-Modified",image.getObjectMetadata().getLastModified().toString());
IOUtils.copy(image.getObjectContent(), response.getOutputStream());
}catch (Exception e) {
if(e instanceof AmazonS3Exception){
int statusCode = ((AmazonS3Exception) e).getStatusCode();
//System.out.println("Status Code : "+statusCode);
response.setContentType("image/jpeg");
if(statusCode==HttpStatus.NOT_MODIFIED.value()){
response.setHeader("ETag",((AmazonS3Exception) e).getAdditionalDetails().get("ETag"));
response.setHeader("Cache-Control",((AmazonS3Exception) e).getAdditionalDetails().get("Cache-Control"));
response.setHeader("Last-Modified",((AmazonS3Exception) e).getAdditionalDetails().get("Last-Modified"));
}
response.setStatus(statusCode);
}
}
}
Questa azione funziona perfettamente.
Ora quello che voglio è pubblicare l'url per accedere all'immagine di ciascun profilo. formato JSON è qualche cosa come questa
{
"profileId" : 342308,
"userId" : 342308,
"firstname" : "Henry",
"lastname" : "Seol",
"title" : "Mr.",
"largeImageUrl" : "https://<host>/image/<id>/<publicUrl>/<filename1.jpg>",
"thumbImageUrl" : "https://<host>/image/<id>/<publicUrl>/<filename2.jpg>"
}
voglio aggiungere che puntano al posto del valore di "largeImageUrl" e "thumbImageUrl".
Se utilizzo la funzione linkTo di hateoas, il metodo corrispondente del controller non deve restituire void.
Come creare questo tipo di collegamento dinamico e aggiungerlo alla risorsa?
È sempre possibile utilizzare 'linkTo (...). Barra (...) ...' come ultima risorsa. Mi chiedo perché il tipo di ritorno del metodo sia 'void' quando si restituisce un'immagine. Avere 'HttpServletRequest' o' HttpServletResponse' come parametri è un no-go. – zeroflagL
Puoi suggerirmi come restituire l'immagine in questo controller non utilizzando HttpServletRequest o HttpServletResponse come parametri o qualsiasi altra soluzione per questo controller? –
Un'alternativa è restituire 'ResponseEntity'. 'InputStreamResource' può essere creato con' new InputStreamResource (image.getObjectContent()) ', suppongo. –
zeroflagL