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

如何为字符串类型的@RequestBody实现自定义校验器?

问题原因与解决方案

核心问题

你的自定义校验器未被触发,主要有两个关键原因:

  • Spring MVC默认不会自动触发方法参数的校验,需要显式开启方法级校验
  • 校验器的initialize方法参数类型错误,导致校验器无法正确初始化绑定到自定义注解

修复步骤

1. 开启方法级参数校验

在你的控制器类上添加@Validated注解(Spring框架提供,专门用于启用方法参数的校验功能):

@RestController
@Validated // 必须添加此注解才能触发参数校验逻辑
public class YourController {

    @RequestMapping(value = "/endpoint", method = { RequestMethod.POST })
    @ResponseBody
    public ResponseEntity<String> authorize(@RequestBody @MyValidator String token) {
        // 业务逻辑
    }
}

2. 修正校验器的初始化方法

你的JsonSyntaxValidator中initialize方法的参数类型错误,应该传入自定义的MyValidator注解,而非JsonFormat,否则校验器无法正确绑定到你的注解:

public class JsonSyntaxValidator implements ConstraintValidator<MyValidator, String> {

    @Override
    public void initialize(MyValidator constraintAnnotation) {
        // 若需要根据注解参数做初始化逻辑可在此实现,无需则留空
    }

    @Override
    public boolean isValid(String token, ConstraintValidatorContext constraintValidatorContext) {
        boolean isValid = true;
        try {
            JsonParser.parseString(token);
        } catch (JsonSyntaxException e) {
            isValid = false;
        }
        return isValid;
    }
}

3. 确保校验依赖存在

如果是Spring Boot项目,确保构建文件中包含校验依赖:
Maven(pom.xml)

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

Gradle(build.gradle)

implementation 'org.springframework.boot:spring-boot-starter-validation'

非Spring Boot项目则需手动引入spring-context和hibernate-validator相关依赖。

4. 调整请求Content-Type(可选)

如果你的请求体是纯字符串而非标准JSON结构,需将请求的Content-Type设置为text/plain,避免Spring自动尝试将其解析为JSON对象导致提前报错。若必须使用application/json,可配置消息转换器强制将请求体转为字符串:

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.add(0, new StringHttpMessageConverter(StandardCharsets.UTF_8));
    }
}

测试验证

修改完成后,用Postman发送非JSON格式的字符串请求,此时自定义校验器会被正常触发,返回你配置的错误提示信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 20:35:18