使用spring boot版本1.3.3.RELEASE ...
我有这样的资源方法:
@RequestMapping(value="/{id}", method=RequestMethod.GET, produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
public @ResponseBody ResponseEntity<byte[]> getImage(@NotNull @PathVariable("id") String imageId) {
// get image from database and return byte[]
if(image == null) {
throw new ResourceNotFoundException("...");
}
}
ResourceNotFoundException
是这样一个简单的类:
@ResponseStatus(HttpStatus.NOT_FOUND)
public class ResourceNotFoundException extends RuntimeException {
private static final long serialVersionUID = 1L;
public ResourceNotFoundException() {
}
public ResourceNotFoundException(String message) {
super(message);
}
public ResourceNotFoundException(String message, Throwable cause) {
super(message, cause);
}
}
这种方法适用于所有其他资源,但我认为它与所需的byte[]
响应机构或它正在生成APPLICATION_OCTET_STREAM_VALUE
的事实相混淆。每当代码到达异常时,我在我的日志中都有这个(并且客户端实际上接收的是500而不是404):
org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation
at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:251) ~[spring-webmvc-4.2.5.RELEASE.jar!/:4.2.5.RELEASE]
...
在这种情况下,我有什么办法可以使用自定义异常吗?我想我可以使用ResponseEntity
构建器,但保持一致会很好。
提前致谢。