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

Spring控制器通知异常处理程序总是返回404

水铭晨
2023-03-14

@ExceptionHandler在控制器内调用时返回带有MyResponse对象的200响应,但从ControllerAdvice调用时返回带有一般404消息的404。我希望它返回一个带有MyResponse对象的200响应。

下面是Controller和ControllerAdvice中的异常处理代码。在测试ControllerAdvision时,我在控制器中注释了它。调试显示在ControllerAdvision中注释掉后正在ControllerAdvision中调用的方法

@ExceptionHandler(MyException.class)
     public MyResponse handleMyException(HttpServletRequest req, MyException e) {
    return new MyResponse(MyResponse.ERROR_CODE, e.getErrorCode(), e.getMessage(), "", null);
}

下面是我如何定义ControllerAdvision。

@EnableWebMvc 
@ControllerAdvice 
@ResponseStatus(value= HttpStatus.OK)
public class ControllerAdviceExceptionHandler {

共有1个答案

司马昕
2023-03-14

问题是我的异常处理程序需要@responsebody注释。我的控制器在Spring中隐式地做到了这一点,但我必须在外部指定它。

SideNote:当我在测试配置的其他地方初始化上下文时,我不得不删除@enableWebMVC注释,以便junit测试工作(即使在服务器运行时一切都工作得很好)

 类似资料:
  • 你们能分享一些关于如何在Spring MVC中设计一个处理异常的良好实现的建议吗?以下是我在网上花了一些时间试图找出处理异常的合适或更好的实现后的一些想法。 以下是我正在进行的项目的一些背景: 使用的MVC框架是Spring Boot Web。与其他使用 Spring MVC 的项目类似,我将代码分为几层:控制器、服务和模型。 在控制器中,主要是验证来自视图(前端)层的表单输入并执行一些业务逻辑。

  • 我有一个Groovy Spring Boot微服务,它返回一个帖子列表。请求进入控制器,控制器调用服务类中的方法,如果没有找到POST,则抛出自定义错误消息。 我已经创建了一个带有@ControllerAdvice注释的控制器,我想截获错误,并创建了一个特定于自定义错误的处理程序。它应该返回一个POJO。目前正在调用ControllerAdvice处理程序,但来自microservice的响应是5

  • 我想要一些关于如何实现以下目标的建议。我不提供代码,因为我的问题是理论上的,但应要求我可以。所以情况是这样的: 我有多个控制器,每个控制器都可以抛出XYException 我有一个@ControllerAdvice类,其中有一个@ExceptionHandler监视XYExceptions。当它发生时,它打印出“xy”。 在一个(且仅有一个)控制器中,当抛出XYException时,我希望执行一些

  • 因此,我试图以通用的方式记录spring项目的控制器返回的所有未捕获的异常。我可以使用以下异常处理程序来完成此操作: 但是,对于方法的每次调用,由于方法中抛出的异常,会创建第二个错误日志:代码来自org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolveHandlerMethodExc

  • 本文向大家介绍C#异常处理知识汇总,包括了C#异常处理知识汇总的使用技巧和注意事项,需要的朋友参考一下 概念   异常处理是指程序在运行过程中,发生错误会导致程序退出,这种错误,就叫做异常   但并不是所有的错误都是异常   而处理这种错误,称为异常处理   异常处理实际是不断去发掘异常、修改异常,使程序更稳定 异常处理主要表现在四个方面:     程序开发前:尽可能的想到会发生的错误,标注怎么处

  • 问题内容: 在学习Spring框架时,我在《 Spring in Action 》一书中注意到,作者并未在控制器中使用方法返回类型。作者将控制器方法声明为的返回类型,并且该方法中的return子句仅返回诸如以下的字符串 有人可以详细说明其工作方式的内部差异吗? 问题答案: 这是深入了解。 Spring提供了一个通常处理所有请求的类。它以其方法做到这一点 最终对象在哪里,是用注释的控制器方法的包装。