如何让API POST请求体中重复属性触发JSON反序列化失败?
解决方案
1. 使用Quarkus配置项快速开启
Quarkus支持通过配置直接开启Jackson的严格重复键检测,无需修改业务代码,在application.properties(或application.yml)中添加对应配置即可:
properties格式
quarkus.jackson.parser-feature.STRICT_DUPLICATE_DETECTION=true
yml格式
quarkus: jackson: parser-feature: STRICT_DUPLICATE_DETECTION: true
开启后,当请求体出现重复JSON键时,Jackson会抛出JsonParseException,Quarkus会自动将其转换为500错误响应,不会再用最后一个键值完成反序列化。
2. 自定义ObjectMapper(灵活扩展场景)
如果需要更精细地控制Jackson的配置逻辑,也可以通过自定义Provider类替换默认的ObjectMapper:
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.core.JsonParser; import jakarta.ws.rs.ext.ContextResolver; import jakarta.ws.rs.ext.Provider; @Provider public class CustomObjectMapperProvider implements ContextResolver<ObjectMapper> { private final ObjectMapper objectMapper; public CustomObjectMapperProvider() { objectMapper = new ObjectMapper(); objectMapper.enable(JsonParser.Feature.STRICT_DUPLICATE_DETECTION); // 可按需添加其他Jackson配置项 } @Override public ObjectMapper getContext(Class<?> type) { return objectMapper; } }
这个类会被Quarkus自动扫描并生效,同样能实现重复键检测失败的效果。
验证效果
当请求体传入{"name" : "banana", "name" : "orange"}这类包含重复键的JSON时,接口会直接返回500错误,响应中会包含Jackson的解析异常信息,不会再静默覆盖重复键的值。
内容的提问来源于stack exchange,提问作者TheRelax
相关产品推荐
相关产品推荐

