В REST API, реализованном с помощью Play Framework (2.4), я использую _ 1_ для синтаксического анализа JSON из тела входящего запроса POST.
С моим текущим кодом (см. Ниже),
Отправка действительного JSON с отсутствующими полями (например,
{"foo": ""}
) дает 400 с телом ответа{"error":"Missing input fields"}
. Это нормально и ожидаемо. ????При публикации полностью недопустимого JSON (например,
{,,,}
или{\00}
) получается 400 с длинным текстом HTML-ответа. ???? Это происходит откуда-то изparse.json
.
В последнем случае: как избавиться от тела ответа HTML? Я бы хотел, чтобы тело ответа либо содержало короткое сообщение об ошибке JSON (например, {"error":"Invalid JSON input"}
), либо вообще ничего. Есть ли в Play возможность конфигурации для этого, или мне нужно будет создать собственное действие? Какой самый простой способ?
Метод контроллера:
def test = Action(parse.json) { request =>
request.body.validate[Input].map(i => {
Ok(i.foo)
}).getOrElse(BadRequest(errorJson("Missing input fields")))
}
Другие материалы, использованные выше:
case class Input(foo: String, bar: String)
object Input {
implicit val reads = Json.reads[Input]
}
case class ErrorJson(error: String)
object ErrorJson {
implicit val writes = Json.writes[ErrorJson]
}
private def errorJson(message: String) = Json.toJson(ErrorJson(message))
onError
метод перехватчика в Global и перехватить возникшее исключение, чтобы настроить сообщение об ошибке? - person Richeek   schedule 30.09.2016