В API REST, реализованном с помощью Play Framework (2.4), я использую Action(parse.json)
для анализа JSON из входящего запроса запроса POST.Как отключить ответы об ошибках HTML при использовании Action (parse.json)?
С моим текущим кодом (смотри ниже),
проводки действительный JSON с отсутствующими полями (например,
{"foo": ""}
) производит 400 с телом ответа{"error":"Missing input fields"}
. Это прекрасно и ожидается.Проводка полностью недопустимый JSON (например,
{,,,}
или{\00}
) производит 400 с long HTML response body. Это происходит где-то в пределах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 и уловить исключение, настроенное для настройки сообщения об ошибке? – Richeek
В моем приложении нет Global; это [устарело] (https://www.playframework.com/documentation/2.4.x/GlobalSettings) в последних версиях Play. Вместо этого предоставление [custom HttpErrorHandler] (http://stackoverflow.com/a/39794930/56285) - это путь. – Jonik
А я вижу. Я использую игру 2.4 – Richeek