J'ai une méthode de contrôleur qui transmet simplement des octets pour les médias (images, css, js, etc.) au client. J'ai d'abord essayé quelque chose comme ceci :
@RequestMapping(value="/path/to/media/**", method=RequestMethod.GET)
@ResponseBody
public byte[] getMedia(HttpServletRequest request) throws IOException
{
//logic for getting path to media on server
return Files.readAllBytes(Paths.get(serverPathToMedia));
}
J'ai d'abord testé cela dans Firefox, et tout semblait fonctionner correctement. Cependant, j'ai ensuite essayé dans Chrome, et j'ai constaté qu'aucune des images ne fonctionnait. J'ai donc modifié le texte en quelque chose comme ceci :
@RequestMapping(value="/path/to/media/**", method=RequestMethod.GET)
public ResponseEntity<byte[]> getMedia(HttpServletRequest request) throws IOException
{
//logic for getting path to media on server
byte[] bytes = Files.readAllBytes(Paths.get(serverPathToMedia));
//logic for setting some header values like Content-Type and Content-Length
return new ResponseEntity<byte[]>(bytes, headers, HttpStatus.OK);
}
Cela a donné les mêmes résultats que précédemment. J'ai vu dans les outils du développeur que mes en-têtes de réponse descendaient comme prévu, mais toujours pas d'octets d'image.
Ensuite, j'ai essayé quelque chose comme ça :
@RequestMapping(value="/path/to/media/**", method=RequestMethod.GET)
public void getMedia(HttpServletRequest request, HttpServletResponse response) throws IOException
{
//logic for getting path to media on server
byte[] bytes = Files.readAllBytes(Paths.get(serverPathToMedia));
response.getOutputStream().write(bytes);
}
Sans même définir d'en-tête de réponse, cela fonctionne dans Firefox et Chrome. Maintenant, bien que je puisse le faire de cette dernière façon puisque cela fonctionne, cela ne semble pas être la bonne façon de faire de Spring MVC. Je veux savoir pourquoi les deux premières méthodes que j'ai essayées n'ont pas fonctionné, car elles semblent plus correctes. De plus, y a-t-il quelque chose que je n'ai pas essayé et qui serait en fait la bonne façon de faire ?