У моего REST API-интерфейса Spring есть проблема (=>406
), когда конечная точка заканчивается именем файла, например. /file/example.xml
, потому что он предполагает, что результат должен быть XML, но это неправильно (это должен быть JSON).Spring REST - как принудительно использовать тип ответа JSON, когда URL заканчивается на .xml
Written [{timestamp=Thu Oct 20 11:11:14 CEST 2016, status=406, error=Not Acceptable, exception=org.springframework.web.HttpMediaTypeNotAcceptableException, message=Could not find acceptable representation, path=/file/foobar.xml}] as "application/json" using [org.springfr[email protected]7015ebef]
Я читал кое-что о Spring 4 функции обнаружения расширений файлов и overwritting тип ответа, поэтому я попытался принудить тип ответа, но я не нашел решение.
Вот мой REST контроллер:
@CompileStatic
@RestController
class ImportFileController {
@RequestMapping(
value = "/file/{fileName:.+}",
method = RequestMethod.PUT,
produces = "application/json"
)
@ResponseBody
public ImportFile update(
@PathVariable("fileName") String fileName,
@RequestBody ImportFile importFile) {
// ..
return importFile
}
}
Это запрос/ответ:
Request PUT /file/foobar.xml {"reader_name":"something"}
Response 406 {
"timestamp" : "2016-10-20 08:56:35",
"status" : 406,
"error" : "Not Acceptable",
"exception" : "org.springframework.web.HttpMediaTypeNotAcceptableException",
"message" : "Could not find acceptable representation",
"path" : "/file/foobar.xml"
}
Что я пробовал:
- Использование
{filenName:.+}
вместо{fileName}
- Использование
produces
в моем@RequestMapping
- Отправка пользовательских
Accept
заголовок (application/json
) - Установка
spring.mvc.path-matching.suffix-pattern
кtrue
илиfalse
, но это было просто дикое предположение
Что сработало:
- Изменение конечной точки из
/file/{fileName:.+}
до/file/{fileName:.+}/update
Но это всего лишь обходной путь, а не решение.
Важно: Я использую Groovy, и я использую конфигурацию YML.
Посмотрите http://stackoverflow.com/a/20743941/1496158. В этом сообщении описывается, как отключить отображение обработчика или включить отображение обработчика только для определенных расширений. – dudel
Исправьте меня, если я ошибаюсь, но это только для конфигурации Java/XML – MonkeyMonkey
Но, конечно же, должен быть способ настройки Spring beans? Это подразумевалось как указатель на то, что нужно настроить. – dudel