使用路径变量对 GET 映射进行自定义验证

Custom validations for GET mapping with pathvariable

我想使用 spring 下面的引导程序进行自定义验证 method.I 想验证 "id" 如果它不是 a 到 z、0 到 9 和 - 那么我想要设置错误消息并将其传递到 ResponseEntity 中。

@RestController
public class DataController {

    @Autowired      DataService dataService;

    @RequestMapping("/data/{id}")
    public ResponseEntity<Data> getData(@PathVariable String id)
    {       
        Data messages = dataService.getData(id, Data.DataFormat.ALL);
        return new ResponseEntity<>(messages, HttpStatus.OK);
    }

您无法自动验证参数中的单个基本类型。

您必须手动验证它。

试试这个:

private static final Pattern ACCEPTED_CHARACTERS = Pattern.compile("^[a-z0-9\-]+$");

@RequestMapping("/data/{id}")
public ResponseEntity<Data> getData(@PathVariable String id)
{       
    if (!ACCEPTED_CHARACTERS.matcher(id).matches()) {
      return new ResponseEntity<>("Your messge", YOUR CODE);
    }
    Data messages = dataService.getData(id, Data.DataFormat.ALL);
    return new ResponseEntity<>(messages, HttpStatus.OK);
}

在实际应用中,模式测试应该在实用程序中完成class

另一种解决方案:您可以使用@Pattern,并且不要忘记在您的class.

之前使用@Validated
@RestController
@RequestMapping("required url")
@Validated
public class yourClassName{
    @RequestMapping("/data/{id}")
    public ResponseEntity<Data> getData(@Valid @Pattern(regexp = "^[a-z0-9\-]+$",message = "Your custom message") @PathVariable String id){       
        Data messages = dataService.getData(id, Data.DataFormat.ALL);
        return new ResponseEntity<>(messages, HttpStatus.OK);
    }
}