Возвращает ли Restlet 415 неподдерживаемый тип носителя, когда он должен возвращать 400 Bad Request?

Я использую Restlet 2.1 с jackson для создания json REST api.

Когда я делаю запрос с ожидаемым типом контента, но с искаженным телом, я получаю код состояния 415 «Неподдерживаемый тип носителя». Я думаю, что правильный код ошибки должен быть 400 «Bad Request».

Очевидно, путаница происходит, когда Джексон пытается и не может расшифровать мусор.

Я попытаюсь прояснить ситуацию с помощью некоторого кода:

// java method mapping
@Post("json")
public Project create(Project project) {

] Вызов службы с помощью curl

$ curl -i -XPOST -H 'content-type: application/json' -d '{xgarbage}' http://localhost:8080/projects HTTP/1.1 415 Unsupported Media Type

И фрагмент трассировки стека, записанный в журналы:

Nov 29, 2010 9:51:56 PM org.restlet.ext.jackson.JacksonRepresentation getObject
WARNING: Unable to parse the object with Jackson.
org.codehaus.jackson.JsonParseException: Unexpected character ('x' (code 120)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
 at [Source: java.io.ByteArrayInputStream@693e4a5a; line: 1, column: 2]
at org.codehaus.jackson.JsonParser._constructError(JsonParser.java:929)

Фактическая реализация службы никогда не выполняется, поэтому где-то принимается решение сопоставить искаженное содержимое с 415.

Теперь мой вопрос: это правильно? Если я правильно читаю следующие цитаты из книги «Веб-службы RESTful», это не так, но я открыт для исправлений.

[400 Bad Request] Обычно используется, когда клиент отправляет представление вместе с запросом PUT или POST, и представление находится в правильном формате, но это не имеет никакого смысла.

.

[415 Unsupported Media Type] Если клиент отправляет документ с правильным типом носителя, но в неправильном формате (например, XML-документ, написанный в неправильном словаре), лучшим ответом будет более общий ответ 400 («Плохой запрос ”)

Верно или нет, я бы предпочел вернуть 400.

Есть ли способ изменить поведение, не отказываясь от автоматической магической сериализации, предоставленной Джексоном?

Любая помощь приветствуется, спасибо!

5
задан Jim Ferrans 30 November 2010 в 19:49
поделиться