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

Spring Boot 3.3中使用JsonView触发400错误问题排查

问题分析与解决

可能原因1:请求参数绑定方式错误

如果你的控制器方法没加@RequestBody注解,直接用对象接收请求参数(依赖Servlet表单参数绑定),那@JsonView根本不会生效。这种情况下Spring会用表单参数绑定逻辑处理请求,而非Jackson反序列化,同时传两个枚举字段时容易出现类型转换或参数匹配错误,返回400。

解决方法

确保控制器方法用@RequestBody接收参数,且请求的Content-Type设为application/json:

@PostMapping("/accept-process")
public ResponseEntity<Void> acceptProcess(
    @JsonView(Process.class) 
    @RequestBody OrderChoice orderChoice
) {
    // 业务逻辑实现
    return ResponseEntity.ok().build();
}

可能原因2:Spring Boot自动配置的ObjectMapper未支持视图继承

Jackson本身支持视图继承(Process继承General后,Process视图会包含General的字段),但Spring Boot 3.3的自动配置可能修改了ObjectMapper默认行为,导致反序列化时没正确识别继承的视图字段。

解决方法

自定义Jackson配置,显式开启视图继承支持:

@Configuration
public class JacksonConfig {
    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        // 确保继承视图的字段在反序列化时被允许
        objectMapper.enable(MapperFeature.DEFAULT_VIEW_INCLUSION);
        // 可选:关闭未知字段报错,避免额外参数导致400
        objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
        return objectMapper;
    }
}

可能原因3:Spring MVC的JsonViewRequestBodyAdvice视图匹配逻辑缺陷

Spring MVC自带的JsonViewRequestBodyAdvice处理@JsonView时,可能存在视图继承的匹配bug,导致无法同时识别父视图和子视图的字段。

解决方法

  1. 显式在typeEnum字段上添加Process视图(哪怕已经继承General):
public class OrderDto {
    // 显式标注Process视图,避免依赖继承识别
    @JsonView({General.class, Process.class})
    private TypeEnum typeEnum;

    @JsonView(Process.class)
    private TypeOrderEnum typeOrderEnum;
}
  1. 或者自定义RequestBodyAdvice替换默认的JsonViewRequestBodyAdvice,修正视图匹配逻辑。

可能原因4:枚举类型反序列化配置不一致

如果枚举类有自定义反序列化逻辑,或者Spring的枚举转换器与Jackson处理逻辑不一致,也可能导致同时传两个枚举字段时出现绑定错误。

解决方法

检查枚举类的反序列化配置,确保与Jackson处理逻辑一致。比如用@JsonValue指定序列化值时,请求传入的值要和注解定义一致:

public enum TypeEnum {
    TYPE_A("A"), TYPE_B("B");

    private final String value;

    TypeEnum(String value) {
        this.value = value;
    }

    @JsonValue
    public String getValue() {
        return value;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 15:15:14