Я настраиваю новый сервер и хочу, чтобы пользователи указали тип принимаемого носителя в заголовке запроса, а в бэкэнде я также настроил типы носителя. Я создал класс 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
}
}
Я ожидаю, что вывод, если мы передадим какой-либо плохой тип носителя вместо этих двух в продуктах, он должен обрабатываться контроллером пользовательских исключений, но теперь он работал только для "applicationtion / bad_value + json", но не для "приложения" /vnd.mime.v1+bad_value".
Есть какие-либо материалы по этому вопросу? Спасибо!