使用pathvariable进行GET映射的自定义验证

时间:2018-05-08 20:44:05

标签: java validation spring-boot annotations custom-validators

我想使用spring boot为以下方法进行自定义验证。我想验证" id"如果它不是a到z,0到9和 - 那么我想设置错误消息并在ResponseEntity中传递它。

@RestController

公共类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);
}

2 个答案:

答案 0 :(得分:1)

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

您必须手动验证它。

试试这个:

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);
}

在真实应用中,模式测试应在实用程序类中完成

答案 1 :(得分:0)

另一种解决方案:您可以使用@Pattern,不要忘记在课前使用@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);
    }
}