如何在play框架java中抛出自定义http错误

时间:2017-10-13 09:45:46

标签: java playframework

以下是保存数据的代码。如果验证失败,我想抛出http错误代码422。但我得到200(OK)回复。怎么做。感谢

public Result saveBook()
    {
        Form<Book> bookForm = formFactory.form(Book.class).bindFromRequest();

        if(bookForm.hasErrors())
        {
            List<String> validationError = new ArrayList<>();

            ObjectNode result = Json.newObject();

            result.put("code", 422);
            result.put("status", "error");

            for(ValidationError e: bookForm.allErrors())
            {
                validationError.add(e.message());
            }

            result.put("errors", Json.toJson(validationError));

            return ok(result);
        }

        Book book = bookForm.get();
        book.save();

        return ok(Json.toJson(book));
    }

2 个答案:

答案 0 :(得分:1)

这一行:

$config

...告诉Play返回return ok(result); (即HTTP状态200)结果。

play.mvc.Results课程提供了以下快捷方式:

  • ok
  • ok()
  • notFound()
  • badRequest()

它不提供422的快捷方式,但您可以轻松创建一个:internalServerError()

所以,只需替换......

status(422, "...")

... with:

return ok(result);

答案 1 :(得分:1)

只需将return ok(Json.toJson(book));替换为return status(422)

或者您可以使用下面的链接查看除了最简单的status(422)表格之外还有其他选项。  https://www.playframework.com/documentation/2.0/api/java/play/mvc/Results.Status.html#Results.Status(play.api.mvc.Results.Status,%20byte[])