Соответствует ли это принципам REST или имеет больше смысла выдавать ошибку 400 BAD REQUEST, если тело не имеет значения true / false?
«Это зависит».
notABoolean
Это вполне разумный text/plain
документ, но он не является действительным application / json документом.
Как отметил Майк, Boolean.valueOf("notABoolean")
имеет четко определенное значение; если вы описали свой API таким способом, который явно ограничивает этот случай, то вы получите то, что получите.
Существует как минимум три возможных кода состояния, которые могут обработать этот случай.
422 Unprocessable Entity - это то, что вы, похоже, ожидали - это примерно переводится как «да, данные - это то, что вы сказали, но в действительности это не имеет никакого смысла».
Если бы вы описали свой API таким образом, чтобы было разумным только application/json
, то этот тест, вероятно, вывел бы либо 415 Неподдерживаемый тип носителя (потому что клиент отправил text/plain
), либо 400 неверный запрос (поскольку notABoolean
не является допустимым значением JSON).
Конечно, строки являются допустимыми значениями json, поэтому полезная нагрузка ниже может привести к тому же исправлению
"notABoolean"
Это приемлемый тип, и он действителен, но вы вернулись на поезде 422.
Чтобы DropWizard вернул вам 422 «бесплатно», изучите документы по проверке .