Spring Boot 3.2.3(Kotlin)单属性DTO反序列化400错误原因咨询
Kotlin单参数类Spring接口反序列化失败原因分析
核心问题
这是Spring依赖的Jackson序列化库对Kotlin单参数类的默认处理逻辑导致的:
- 当你的
UserByTokenRequest类只有单个参数的主构造器时,Jackson会默认把这个构造器识别为「字符串转该类实例的转换器」,而非用来解析JSON对象的构造器。 - 当你发送
{"apiToken":"xxx"}这类JSON对象请求体时,Jackson会尝试把整个JSON对象转换成字符串传入构造器,这显然和构造器期望的字符串参数不匹配,因此抛出HttpMessageNotReadableException错误。
为什么两种操作能解决问题
- 新增第二个属性:此时类的主构造器参数数量≥2,Jackson会自动切换到正常的「属性匹配模式」,按照JSON字段和类属性的对应关系解析请求体,自然就能正确识别
apiToken字段。 - 给
apiToken添加@JsonProperty注解:这个注解明确告诉Jackson,构造器的该参数对应JSON中的apiToken字段,强制Jackson按照对象属性的逻辑解析请求体,而非把构造器当作字符串转换器。
内容的提问来源于stack exchange,提问作者Vahid
相关产品推荐
相关产品推荐

