首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Play Framework中捕获413错误?

如何在Play Framework中捕获413错误?
EN

Stack Overflow用户
提问于 2017-07-13 08:43:51
回答 1查看 134关注 0票数 1

我想返回一个JSON响应,而不是HTML。我不知道怎么困住它。例如,我将'play.http.parser.maxMemoryBuffer‘设置为1MB,如果请求正文超过1MB,它将返回一个JSON响应,而不是HTML格式,说明这是一个坏响应。

EN

回答 1

Stack Overflow用户

发布于 2020-03-25 02:49:31

根据JSON :要从HTML切换到the documentation响应,可以在application.conf中添加以下代码行

代码语言:javascript
复制
play.http.errorHandler = play.http.JsonHttpErrorHandler

如果您还想自定义消息,则应将此行添加到application.conf

代码语言:javascript
复制
play.http.errorHandler = "com.example.ErrorHandler"

显然,上面的代码行应该指向您自己的错误处理程序实现,可能如下所示:

代码语言:javascript
复制
package com.example

import play.http.HttpErrorHandler;
import play.mvc.*;
import play.mvc.Http.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionStage;
import javax.inject.Singleton;

@Singleton
public class ErrorHandler implements HttpErrorHandler {
  public CompletionStage<Result> onClientError(RequestHeader request, int statusCode, String message) {
    if (statusCode == 413) {
        return CompletableFuture.completedFuture(Results.status(statusCode, "A client error occurred: " + message + " The payload size should be lower than 1Mb."));
    } else {
        return CompletableFuture.completedFuture(Results.status(statusCode, "A client error occurred: " + message));
    }
  }

  public CompletionStage<Result> onServerError(RequestHeader request, Throwable exception) {
    return CompletableFuture.completedFuture(
        Results.internalServerError("A server error occurred: " + exception.getMessage()));
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45069693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档