I tried returning a @ResponseBody BufferedImage, but Spring kept returning an HTTP status 406.
Here's how I ended up solving the problem WITHOUT using the BufferedImageHttpMessageConverter (which seems to be a poorly documented method).
@RequestMapping(value = "/{id}.jpg",
method = RequestMethod.GET)
@ResponseBody
@Secured("ROLE_READ")
public ResponseEntity<byte[]> get(@PathVariable Long id)
throws Exception {
// Load it from disk
File imageFile = new File(...);
try {
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "image/jpg");
byte[] bytes = FileUtils.getBytes(imageFile);
return new ResponseEntity(bytes, headers,
HttpStatus.NOT_FOUND);
} catch (IOException e) {
log.log(Level.INFO, "Couldn't load image file: " +
imageFile.getAbsolutePath(), e);
throw e;
}
}