我正在设置一台新服务器,并且想让用户在请求标头中提供接受媒体类型,在后端,我还配置了可生产的媒体类型。我创建了一个ExceptionController类作为@ControllerAdvice来手动处理一些异常,其中之一是HttpMediaTypeNotAcceptableException(406)。我使用的是供应商媒体类型,例如“ application / vnd.mime.v1 + json”,当我在供应商字符串中放入错误的内容时可以正确处理,但是如果我将“ json”更改为奇怪的内容“ json8”或“ pdf”,它将使我的响应正文空白,而其他响应正文的性能则不同。
这是我的ExceptionController:
@ControllerAdvice
public class ExceptionController {
private static final Logger LOG = Logger.getLogger(ExceptionController.class);
public ExceptionController() {
}
@ExceptionHandler({HttpMediaTypeNotAcceptableException.class})
@ResponseStatus(HttpStatus.NOT_ACCEPTABLE)
public HttpEntity<? extends ResourceSupport> handleNotAcceptableMediaTypeException(HttpServletRequest request, HttpMediaTypeNotAcceptableException ex) {
LOG.error("Returned status code " + HttpStatus.NOT_ACCEPTABLE.value(), ex);
CollectionResource response = new CollectionResource();
CommonErrorCode invalidVendorMediaType = CommonErrorCode.INVALID_VENDOR_MEDIA_TYPE;
String mediaType = MediaType.toString(ex.getSupportedMediaTypes());
invalidVendorMediaType.setMessageParameters(new String[]{mediaType});
response.getErrors().addAll(this.errorHandler.returnError(invalidVendorMediaType));
return new ResponseEntity(response, HttpStatus.NOT_ACCEPTABLE);
}
}
我的控制器类似于:
public class controller {
@GetMapping(path = "/xxx", produces = {"application/vnd.mime.v1+json", MediaType.APPLICATION_JSON_VALUE}
public ResponseEntity<> getXXX (){
// logic here
}
}
我期望输出,如果我们通过任何不良的媒体类型而不是生产中的这两种,应该由自定义异常控制器处理,但是现在它仅适用于“ appliction / bad_value + json”,而不适用于“ application” /vnd.mime.v1+bad_value”。
对此有何投入?谢谢!