首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Spring-boot HttpMediaTypeNotAcceptableException不会被同一控制器中的@ExceptionHandler捕获

Spring-boot HttpMediaTypeNotAcceptableException是一个异常类,表示客户端请求的媒体类型不可接受。当客户端请求的媒体类型与服务器支持的媒体类型不匹配时,就会抛出该异常。

在同一个控制器中使用@ExceptionHandler注解可以捕获并处理控制器中抛出的异常。然而,对于HttpMediaTypeNotAcceptableException异常,@ExceptionHandler可能无法捕获到该异常。

这是因为HttpMediaTypeNotAcceptableException异常通常是在Spring MVC的请求处理链的早期阶段抛出的,此时控制器方法还没有被调用。因此,@ExceptionHandler注解可能无法捕获到该异常。

要解决这个问题,可以在控制器类上使用@ControllerAdvice注解,并在该类中定义一个方法来处理HttpMediaTypeNotAcceptableException异常。这样,无论在控制器的哪个方法中抛出该异常,都可以被@ControllerAdvice注解标记的类中的方法捕获并处理。

以下是一个示例代码:

代码语言:txt
复制
@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(HttpMediaTypeNotAcceptableException.class)
    public ResponseEntity<String> handleMediaTypeNotAcceptableException(HttpMediaTypeNotAcceptableException ex) {
        // 处理异常的逻辑
        return new ResponseEntity<>("Media type not acceptable", HttpStatus.NOT_ACCEPTABLE);
    }
}

在上述示例中,我们使用@ControllerAdvice注解标记了一个全局异常处理类GlobalExceptionHandler,并在该类中定义了一个方法handleMediaTypeNotAcceptableException来处理HttpMediaTypeNotAcceptableException异常。该方法返回一个包含错误信息的ResponseEntity对象。

需要注意的是,以上示例中的处理逻辑仅供参考,实际处理方式应根据具体业务需求进行调整。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 云数据库 MySQL 版:https://cloud.tencent.com/product/cdb_mysql
  • 云原生应用引擎(TKE):https://cloud.tencent.com/product/tke
  • 人工智能平台(AI Lab):https://cloud.tencent.com/product/ailab
  • 物联网开发平台(IoT Explorer):https://cloud.tencent.com/product/iothub
  • 移动推送服务(信鸽):https://cloud.tencent.com/product/tpns
  • 对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯区块链服务(TBCS):https://cloud.tencent.com/product/tbcs
  • 腾讯元宇宙(Tencent Metaverse):https://cloud.tencent.com/solution/metaverse
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

@ControllerAdvice全局异常处理器没生效?生产报错日志看得眼花缭乱...

因为Exception是所有异常父类,所以当程序抛出异常,添加ExceptionHandler注解方法没有具体异常类型与之相匹配时,那都会被下面的方法捕获处理。...从结果来看,BaseController里面的ExceptionHandler已经捕获了异常,所以全局异常处理器就给忽略了。...总结 当程序抛出一个异常时,Spring 框架会捕获这个异常,并依次按照如下顺序开始寻找合适@ExceptionHandler方法来处理这个异常。...Spring 会从当前控制器查找是否有匹配@ExceptionHandler方法。如果有多个@ExceptionHandler方法,Spring 会根据异常类型和方法参数来选择最匹配一个。...如果在当前控制器没有找到匹配@ExceptionHandler方法,Spring 会向上搜索控制器父类,看看是否有匹配方法。

40910

掌握 Spring 之异常处理

image-20190518131151510 @ExceptionHandler 接下来我们看下 @ExceptionHandler 用法,这个注解通常定义在某个控制器方法里,表明处理该控制器出现指定异常...可以设置多个需要捕获处理异常类型,也可以填默认为所有异常类,更多信息可以查看 mvc-ann-exceptionhandler 然后使用 Postman 工具模拟请求项目的 API 接口 /exception2...image-20190518134744575 这样方式使用 @ExceptionHandler 存在一个缺陷,就是只会针对当前控制器异常处理,若需要实现全局控制器异常处理,还需要配合注解 @ControllerAdvice...@ControllerAdvice Spring 3.2 引入了一种新注解 @ControllerAdvice,用于将所有控制器异常处理放在一处进行,将指定一个类作为全局异常处理器,用 @ExceptionHandler...这表明了异常处理也存在优先级,先交给当前控制器 @ExceptionHandler方法处理,若未处理再由全局@ExceptionHandler 方法处理。

1.7K20
  • 求求你们了,别再写满屏 try catch 了!看如何更优雅地处理异常?

    所以注解@ControllerAdvice出现了,简单说,该注解可以把异常处理器应用到所有控制器,而不是单个控制器。...,会被判定为:缺少路径参数; MissingServletRequestParameterException:缺少请求参数。...串反序列化成 pojo 过程失败了,也会抛该异常; HttpMessageNotWritableException:返回 pojo 在序列化成 json 过程失败了,那么抛该异常; HttpMediaTypeNotAcceptableException...实际上,当出现404时候,默认是抛异常,而是 forward跳转到/error控制器,spring也提供了默认error控制器,如下: BasicErrorController 那么,如何让404...spring.mvc.throw-exception-if-no-handler-found=true spring.resources.add-mappings=false 如此,就可以异常处理器捕获它了

    95510

    统一异常处理介绍及实战

    所以注解@ControllerAdvice出现了,简单说,该注解可以把异常处理器应用到所有控制器,而不是单个控制器。...,会被判定为:缺少路径参数; MissingServletRequestParameterException:缺少请求参数。...串反序列化成 pojo 过程失败了,也会抛该异常; HttpMessageNotWritableException:返回 pojo 在序列化成 json 过程失败了,那么抛该异常; HttpMediaTypeNotAcceptableException...实际上,当出现404时候,默认是抛异常,而是 forward跳转到/error控制器,spring也提供了默认error控制器,如下: ?...spring.mvc.throw-exception-if-no-handler-found=true spring.resources.add-mappings=false 如此,就可以异常处理器捕获它了

    1.4K20

    第7章—SpringMVC高级技术—处理异常

    对于@ExceptionHandler注解标注方法来说,比较有意思一点在于它能处理同一控制器中所有处理器方法所抛出异常。...3.4为控制器添加通知 如果多个控制器类中都会抛出某个特定异常,那么你可能会发现要在所有的控制器方法重复相同@ExceptionHandler方法。...或者,为了避免重复,我们会创建一个基础控制器类,所有控制器类要扩展这个类,从而继承通用@ExceptionHandler方法。...@ControllerAdvice最为实用一个场景就是将所有的@ExceptionHandler方法收集到一个类,这样所有控制器异常就能在一个地方进行一致处理。 ?...在重定向后,存在会话flash属性会被取出,并从会话转移到模型之中。 ? img ?

    1.3K40

    减少 try catch竟然这么容易?

    所以注解@ControllerAdvice出现了,简单说,该注解可以把异常处理器应用到所有控制器,而不是单个控制器。...:然后再对请求头与控制器支持做比较,比如content-type请求头,若控制器参数签名包含注解@RequestBody,但是请求content-type请求头值没有包含application/...,会被判定为:缺少路径参数; MissingServletRequestParameterException:缺少请求参数。...实际上,当出现404时候,默认是抛异常,而是 forward跳转到/error控制器,spring也提供了默认error控制器,如下: 那么,如何让404也抛出异常呢,只需在properties...spring.mvc.throw-exception-if-no-handler-found=true spring.resources.add-mappings=false 如此,就可以异常处理器捕获它了

    77310

    替代try catch处理异常优雅方式

    所以注解@ControllerAdvice出现了,简单说,该注解可以把异常处理器应用到所有控制器,而不是单个控制器。...:然后再对请求头与控制器支持做比较,比如content-type请求头,若控制器参数签名包含注解@RequestBody,但是请求content-type请求头值没有包含application/...,会被判定为:缺少路径参数; MissingServletRequestParameterException:缺少请求参数。...实际上,当出现404时候,默认是抛异常,而是forward跳转到/error控制器,spring也提供了默认error控制器,如下: 那么,如何让404也抛出异常呢,只需在properties...spring.mvc.throw-exception-if-no-handler-found=true spring.resources.add-mappings=false 如此,就可以异常处理器捕获它了

    36521

    解决Spring MVCHttpMediaTypeNotAcceptableException异常

    客户端请求Accept字段不正确或匹配服务器响应类型除了服务器无法提供所需媒体类型外,HttpMediaTypeNotAcceptableException异常还可能是由于客户端请求Accept...客户端请求Accept字段不正确或匹配服务器响应类型除了服务器无法提供所需媒体类型外,HttpMediaTypeNotAcceptableException异常还可能是由于客户端请求Accept...如果客户端请求Accept字段不正确或匹配服务器响应类型,就会出现HttpMediaTypeNotAcceptableException异常。...如果客户端请求Accept字段匹配任何已配置媒体类型,服务器将返回JSON格式响应。3....在异常处理器,您可以捕获HttpMediaTypeNotAcceptableException异常,并返回适当错误响应,如下所示:@ControllerAdvicepublic class CustomExceptionHandler

    3.2K10

    Spring MVC统一异常处理 - `@ExceptionHandler`

    概述 在Web应用程序,错误和异常是不可避免。Spring MVC框架提供了@ExceptionHandler注解,用于捕获和处理控制器抛出异常。...通过在控制器方法中标记@ExceptionHandler,可以为特定类型异常提供自定义处理逻辑。该注解可以应用于控制器类级别或方法级别。...当控制器抛出MyException异常时,handleMyException方法会被调用,返回一个包含错误信息ModelAndView。...: 创建一个控制器类,用于处理订单相关操作,并在控制器添加@ExceptionHandler方法来处理OrderException异常。...结论 Spring MVC@ExceptionHandler注解为Web应用程序提供了便捷异常处理机制。通过使用该注解,可以在控制器捕获和处理特定类型异常,提供友好错误信息给用户。

    1.1K10

    减少 try catch ,可以这样干!

    所以注解@ControllerAdvice出现了,简单说,该注解可以把异常处理器应用到所有控制器,而不是单个控制器。...:然后再对请求头与控制器支持做比较,比如content-type请求头,若控制器参数签名包含注解@RequestBody,但是请求content-type请求头值没有包含application/...,会被判定为:缺少路径参数; MissingServletRequestParameterException:缺少请求参数。...实际上,当出现404时候,默认是抛异常,而是 forward跳转到/error控制器,spring也提供了默认error控制器,如下: 那么,如何让404也抛出异常呢,只需在properties...spring.mvc.throw-exception-if-no-handler-found=true spring.resources.add-mappings=false 如此,就可以异常处理器捕获它了

    83840

    SpringMVC异常处理(一)

    异常处理基本原则在实现SpringMVC异常处理之前,我们需要先了解一些基本原则,以确保我们能够正确地捕获和处理异常。以下是一些关键原则:异常应该在应用程序最高级别上捕获。...这意味着我们应该将异常捕获到最外层控制器,然后再决定如何处理它。异常处理应该根据异常类型进行区分。...以下是三种常用方式:@ExceptionHandler注解@ExceptionHandler注解是SpringMVC一种异常处理机制。...通过在控制器方法上添加@ExceptionHandler注解,我们可以将该方法定义为异常处理方法。当在该控制器抛出指定类型异常时,SpringMVC会自动调用该方法来处理异常。...当该类型异常发生时,handleRuntimeException方法会被调用,并返回一个状态码为500错误响应。

    21320

    掌握这几个减少 try catch 方法,让代码更简洁!

    所以注解@ControllerAdvice出现了,简单说,该注解可以把异常处理器应用到所有控制器,而不是单个控制器。...:然后再对请求头与控制器支持做比较,比如content-type请求头,若控制器参数签名包含注解@RequestBody,但是请求content-type请求头值没有包含application/...,会被判定为:缺少路径参数; MissingServletRequestParameterException:缺少请求参数。...实际上,当出现404时候,默认是抛异常,而是 forward跳转到/error控制器,spring也提供了默认error控制器,如下: fa45573ef575a2ee9c754551729d953e.png...spring.mvc.throw-exception-if-no-handler-found=true spring.resources.add-mappings=false 如此,就可以异常处理器捕获它了

    45620

    Spring Web MVC框架(六) 异常处理

    Spring Web MVC对异常处理有着完善支持,我们可以捕获控制器抛出任何异常,然后按照异常类型将异常信息映射到某个视图文件,向用户显示对应信息。...@ExceptionHandler 最简单办法就是使用@ExceptionHandler注解。它可以定义到一个控制器,处理该控制器抛出异常。...@ExceptionHandler注解接受一个Class,指定捕获哪个异常。如果指定这个值,则捕获方法参数列表所有异常。...当这样异常抛出时,ResponseStatusExceptionResolver会捕获这些异常并设置相应错误代码。...在Spring Web MVC,该页面不仅可以是一个HTML或JSP页面,也可以是控制器某个处理方法接受URL。

    33120

    微服务项目:尚融宝(10)(后端接口:统一异常处理)

    ,但是你会发现,针对每个不同异常我们都需要在项目中添加对应处理方法,并捕获对应异常对象,可能还要针对这个异常添加额外依赖。...这显然不是最好方式。 方案:此类异常直接抛出,并且用Exception类捕获就可以了。...4、恢复制造异常 @TableField(value = "is_deleted") 四、自定义异常 目标:使用一个或较少异常类,可以捕获和显示所有的异常信息。...方案:因此,我们可以创建一个自定义异常类(必须是运行时异常),在程序抛出这个自定义异常对象,并在统一异常处理器捕获自定义异常对象 1、创建自定义异常类 @Data @NoArgsConstructor...我们可以在控制台日志查看具体错误原因。前端只需要返回相对简单友好提示即可。

    30130

    在SpringMVC中统一处理异常

    在SpringMVC,允许开发人员自定义方法,用于统一处理异常,以至于某些异常可能在多种处理请求过程中都可能出现,但是,只需要编写1次处理代码即可!...则等同于这些处理请求方法会将异常抛出,而SpringMVC框架在调用这些处理请求方法时,会捕获这些异常,此时,如果开发人员自定义了处理异常方法,则SpringMVC会在捕获到异常之后,调用处理异常方法...; } return jsonResult; } 注意:当统一处理异常代码在某个控制器内部时,只能作用于当前控制器抛出异常!...如果需要统一处理异常代码能够处理所有控制器异常,可选解决方法有: 创建控制器基类(所有控制器共同父类),将统一处理异常代码放在基类; 自定义某个类,将统一处理异常代码放在这个类...则表示handleException()将处理RuntimeException类型异常,而其它类型,例如IOException等异常将不会被该方法处理!

    31010
    领券