Spring启动应用程序中的请求主体验证失败



我希望我的REST API在存在异常和参数类型不匹配时抛出异常。以下是我的请求对象。

public class MyReqDto {
@NotNull
@Pattern(regexp = "[^a-zA-Z0-9]", message = "Invalid characters found in subscriberType")
private String subscriberType;
@NotNull
@Pattern(regexp = "^[a-zA-Z0-9]", message = "Invalid characters found in caseId")
private String caseId;

在上述情况下,只要请求违反此String要求(为subscriberType提供一个整数值(,就应该抛出异常。此外,我还需要针对无效字符(如*、-、<、>(对它们进行验证等等。为此,我使用了@Pattern注释。

我的控制器看起来像这样。

@Controller
public class MyController {
@RequestMapping(value = "/my-controller/traceId/{Trace_ID}", method = RequestMethod.POST, produces =
"application/json")
public ResponseEntity<Object> startWork(@PathVariable Optional<String> Trace_ID,
@Valid @RequestBody MyReqDto myReqDto)
throws Exception {

我正在使用@Valid注释,并且我已经为hibernate验证器包含了maven依赖项

<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.0.2.GA</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.0.0.GA</version>
</dependency>

但问题是,它不能验证我的输入,也不能接受subscriberType和caseId的整数值。

非常感谢在这方面的任何帮助。

不确定验收标准。我想你会期待以下模式。

Regex模式

  • [A-Za-z ]*来匹配字母和空格。

  • ".*[^0-9].*"匹配数字

https://www.vogella.com/tutorials/JavaRegularExpressions/article.html

验证模式的问题出现在我的正则表达式中。以下内容解决了问题。

public class MyReqDto {
@NotNull
@Pattern(regexp = "^[a-zA-Z0-9]", message = "Invalid characters found in subscriberType")
private String subscriberType;
@NotNull
@Pattern(regexp = "^[a-zA-Z0-9]", message = "Invalid characters found in caseId")
private String caseId;

我注意到,默认情况下,将请求主体参数声明为字符串,并为其提供一个整数值可以很好地工作,不会引发异常。但是,如果我们将请求主体参数声明为integer并为其提供字符串值,它将引发异常。

简单的caseId="123"和caseId=123在我的请求体中具有相同的效果,因为caseId被声明为字符串。

相关内容

  • 没有找到相关文章

最新更新