Ошибка 500 с .jpg при использовании пользовательской обработки исключений с весенней загрузкой? - PullRequest
0 голосов
/ 05 ноября 2019

У меня есть тестовый сервис, который я написал, который просто принимает заголовок файла в качестве параметра, то есть testfile.jpg. Все, что он делает, - это генерирует мое пользовательское исключение с сообщением пользовательского исключения. Когда я использую 'testfile' в качестве параметра, он работает нормально .. дает 400 код ошибки. Если я использую 'testfile.jpg', мне кажется, что расширение там не нравится, и вместо этого код состояния ошибки возвращается как внутренняя ошибка 500.

Кто-нибудь знает, что я могу сделать, чтобы это исправить? поэтому он отображает правильный код ошибки 400 при использовании файлов с расширением (например, testfile.jpg)?

Контроллер:

    @ApiOperation("Tests")
    @RequestMapping(value = {"/testingURL/{test}"}, method = RequestMethod.GET, produces = {MediaType.IMAGE_PNG_VALUE,MediaType.IMAGE_JPEG_VALUE})
    @ResponseBody
    public ResponseEntity<byte[]> getTestingURL(@PathVariable String test) throws Exception{
        return assetStoreService.test(test);
    }

Метод обслуживания:

    public ResponseEntity<byte[]> test(final String test) throws CustomTestException{
    if(!test.isEmpty()){
        exceptionThrower();
    }
    TestImage testImage = new TestImage();
        return getResponseEntity(testImage);
    }

exceptionThrower:

    private void exceptionThrower() throws CustomTestException {
        throw new CustomTestException("blahbah");
    }

CustomTestException.java:

public class CustomTestException extends Exception {
    public CustomTestException(String errorMessage) {
        super(errorMessage);
    }
}

Обработчик исключений:

    @ResponseStatus(value = HttpStatus.BAD_REQUEST)
    @ExceptionHandler(CustomTestException.class)
    protected ResponseEntity handleCustomTestException (HttpServletRequest request, CustomTestException ex){
        request.removeAttribute(
                HandlerMapping.PRODUCIBLE_MEDIA_TYPES_ATTRIBUTE);
        TestError testError = new TestError(HttpStatus.BAD_REQUEST,ex.getMessage(),ex);
        return new ResponseEntity<Object>(testError, new HttpHeaders(), testError.getStatus());
    }

Бит ниже, для удаления принятого возврататипы (изображения), чтобы он мог возвращать исключительную реакцию объекта json:

    request.removeAttribute(
            HandlerMapping.PRODUCIBLE_MEDIA_TYPES_ATTRIBUTE);

1 Ответ

0 голосов
/ 05 ноября 2019

Это часть переговоров о содержании, как лучшая практика. Если вы все еще хотите использовать расширение, попробуйте это в файле application.properties

spring.mvc.contentnegotiation.favor-path-extension = true

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...