当前位置: 首页 > 知识库问答 >
问题:

如何将错误消息添加到响应正文?

曹鹏海
2023-03-14

我有一个Java Servlet类,当我的应用程序中存在身份验证问题时,我尝试在其中设置错误状态。但是,问题是,我可以设置错误状态,但无法在响应正文中设置错误消息。以下是我的尝试:

授权筛选器。Java语言

public class AuthorizationFilter implements Filter {
    @Autowired
    private ExceptionHandler exceptionHandler;

    @Override
    public void doFilter(final ServletRequest servletRequest, final ServletResponse servletResponse, final FilterChain filterChain) throws IOException, ServletException {
        final HttpServletRequest request = (HttpServletRequest) servletRequest;
        final HttpServletResponse response = (HttpServletResponse) servletResponse;

        UserSession userSession = null;
        try {
             userSession = authProvider.authenticate(request, response);
        } catch(RestUsageException throwable) {
            exceptionHandler.handle(throwable.getExceptionCode(), throwable.getMessage(), throwable, response);
            response.sendError(throwable.getRespondStatus().value());
        //  response.sendError(throwable.getRespondStatus().value(), "Message");
            return;
        }
    ...more code here
    }

例外处理程序。Java语言

@Override
public void handle(String exceptionCode, String message, Throwable throwable, final ServletResponse response) throws IOException {

    String uuid = UUID.randomUUID().toString();
    ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
    String json = "{  \n" +
                "   \"errorCode\":\""+exceptionCode+"\",\n" +
                "   \"errorMessage\":\""+throwable.getMessage()+"\",\n" +
                "   \"success\":\"false\",\n" +
                "   \"errorId\":\""+uuid+"\"\n" +
                "}";
    response.getOutputStream().println(json);
  //  response.getOutputStream().flush();
}

我的Trowable包含要显示的正确HTTP状态。我尝试了两件事:

  1. 我试着按照这个方法做:public ultsendError(int sc,java.lang.String msg)抛出java.io.IOException

但该消息似乎仅显示在HTTP状态标头中。

有没有关于如何设置错误消息正文的想法?任何帮助都将不胜感激。谢谢

共有1个答案

盖雪峰
2023-03-14

您不能将响应流与响应结合使用。sendError(…) 。尝试使用响应。设置状态(…) ”。

 类似资料:
  • 我有一个基本的SQS队列,它使用redrive策略触发Lambda,在5次重试后将失败的消息发送到DLQ。我读到Lambda应该在消息中添加关于错误的消息属性 除了在DLQ中查看消息时,我没有看到任何来自Lambda的ErrorCode、ErrorMessage属性外,其他一切都正常工作。有人用这个吗?

  • 如何使用.NET将Content-Length,Content-Type和Last-Modified添加到HttpResponseMessage标头。 我需要手动将所有这些值添加到响应中,添加这些字段后,我需要从服务器返回响应。我试着以空闲的方式添加这些字段 我得到了休耕的错误 “错误使用了标头名称。请确保请求标头与HttpRequestMessage一起使用,响应标头与HttpReponseMe

  • 我非常确定“Expires”是有效的HTTP响应头类型。但是当我尝试在代码中设置它时:(这是在ActionFilter.OnActionExecuted方法中) 我最后有一个例外: InvalidOperationException:错误使用的标头名称。确保请求头与HttpRequestMessage一起使用,响应头与HttpResponseMessage一起使用,内容头与HttpContent对

  • 我有一个REST服务,它暴露在iPhone和Android客户端上。目前我遵循HTTP代码200、400、401、403、404、409、500等。 还是通过JSON将其放在响应体中更好?

  • 考虑下面的代码: 我想做的是用我应该从JSON响应中获得的错误消息捕获错误。我希望在我的第二个console.log中得到一个响应,但是不知何故,响应在第一个console.log.我如何在第一个实例中得到我想要的响应? 此外,为什么响应在第一个实例中给我“ok”,即使应用编程接口密钥不存在? 为什么我必须返回rsp.json()才能在第二个实例中获得正确的JSON,而响应应该已经是JSON格式的

  • 这几个月来,我们一直在努力实现这一目标,但现在需要这样做。我需要显示服务器上设置的错误消息,说明出现了什么错误: 服务器endpoint 网状物: 在chrome开发工具中的预览下,我看到消息