Я создал это отображение REST, так что он может принимать имена файлов в конце URI ...весной ошибка requestmapping HTTP 406 расширения файла
@RequestMapping(value="/effectrequest/{name}/{imagename:[a-zA-Z0-9%\\.]*}",
headers="Accept=*/*", method=RequestMethod.GET,
produces = "application/json")
public @ResponseBody EffectRequest effectRequest(
@PathVariable("name") String name,
@PathVariable("imagename") String imageName)
{
return new EffectRequest(2, "result");
}
который возвращает содержимое JSON с помощью MappingJackson2HttpMessageConverter. Я делаю тест JQuery AJAX вызов этого отображения с ...
var effectName = 'Blur';
var imageName = 'Blah.jpg';
var requestUri = '/effectrequest/' + effectName + '/' + imageName;
alert(requestUri);
$(document).ready(function() {
$.ajax({
url: /*[+ [[${hostname}]] + requestUri +]*/
}).then(function(data) {
$('.effect').append(data.id);
$('.image').append(data.content);
});
});
Это создает URI из http://localhost/effectrequest/Blur/Blah.jpg и в сеансе отладки имя файла правильно принятого в методе effectRequest() выше. Однако клиент или jQuery AJAX-вызов получает ошибку HTTP 406 (недопустимо) с сервера, даже с produces = "application/json"
в RequestMapping.
После долгих отладочных работ, у меня это сужение - когда я изменяю тестовый код javascript для создания URI http://localhost/effectrequest/Blur/Blah.json
, он работает. Таким образом, либо Tomcat, либо MappingJackson2HttpMessageConverter
вызывают ошибку HTTP 406, просматривая расширение имени файла в конце URI и решая, что содержимое JSON, которое я отправляю обратно, не является хорошим совпадением.
Можно ли переопределить это поведение без необходимости кодирования. (точка) в имени файла?
Кроме того, я попробовал принудительный URIEncode в имени файла, заменив. (точка) с% 2E. RequestMapping правильно декодирует имя файла, но я все равно получаю сообщение об ошибке HTTP 406 при отправке JSON. Поэтому я могу заставить кодировать. (точка) каким-либо другим способом, если нет способа изменить конфигурацию по умолчанию в этом приложении Spring Boot? –