You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Quarkus如何捕获FAIL_ON_UNKNOWN_PROPERTIES开启时JSON未知字段异常并返回响应

解决方案

不需要为请求对象编写自定义反序列化器,通过全局异常处理器即可捕获该类异常并返回自定义响应,具体实现方式如下:

核心原理

你开启FAIL_ON_UNKNOWN_PROPERTIES = true后,请求携带多余字段时,Jackson会在反序列化阶段抛出UnrecognizedPropertyException异常,该异常属于JAX-RS标准可捕获的异常范畴,直接全局处理即可,无需针对每个请求类做单独适配。

实现步骤

  • 编写ExceptionMapper实现类,用@Provider注解注册为全局异常处理器
    import com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException;
    import javax.ws.rs.core.Response;
    import javax.ws.rs.ext.ExceptionMapper;
    import javax.ws.rs.ext.Provider;
    import java.util.Map;
    
    @Provider
    public class UnknownPropertyExceptionHandler implements ExceptionMapper<UnrecognizedPropertyException> {
    
        @Override
        public Response toResponse(UnrecognizedPropertyException e) {
            // 提取异常的核心信息返回
            String invalidField = e.getPropertyName();
            String targetClassName = e.getReferringClass().getSimpleName();
            Map<String, Object> resp = Map.of(
                "error_code", "INVALID_REQUEST_FIELD",
                "error_msg", String.format("字段[%s]不允许出现在%s类型的请求中", invalidField, targetClassName)
            );
            // 返回400错误和自定义的响应体
            return Response.status(Response.Status.BAD_REQUEST).entity(resp).build();
        }
    }
    
  • 无需额外配置,Quarkus启动时会自动扫描@Provider注解的类并注册,直接生效。

可选扩展

如果需要统一处理所有Jackson反序列化相关的参数错误(比如类型不匹配、字段格式错误等),可以将捕获的异常类型改为JsonProcessingException,在方法内根据异常子类型返回不同的提示即可。


内容的提问来源于stack exchange,提问作者Disteonne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 12:36:04