当前位置: 首页 > 知识库问答 >
问题:

在Spring Boot应用程序中请求正文验证失败

蓬思博
2023-03-14

我希望我的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;

在上面的情况下,当一个请求违反这个字符串要求时,应该引发异常(向订阅类型提供一个整数值)。我还需要对无效字符进行验证,如*、-、

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

@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>

但问题是,它不验证我的输入,也不接受订阅类型和caseId的整数值。

对此的任何帮助都是高度赞赏的。

共有2个答案

齐意致
2023-03-14

验证模式的问题出现在我的正则表达式中。下面解决了这个问题。

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;

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

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

蒙胤
2023-03-14

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

正则模式

>

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

    “*[^0-9].*”匹配数字

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

  •  类似资料:
    • 我们正在使用JAX RS为我们的一个项目实现一个REST API。要求是用户将以JSON格式传入请求对象。 让我们假设我们有一个在命中APIendpoint时调用的方法 示例请求对象: { “firstName”:“Test”, “lastName”:“Name”, “sno”:“A123” } 吸气剂和setter 现在,如果用户尝试向上面给出的请求对象添加其他参数(例如:“age”)并调用ap

    • 我参与了一个小型测试项目,以检查Spring Reactive Web应用程序实际上是如何与MongoDB一起工作的。 我遵循手册https://docs.spring.io/spring/docs/5.0.0.M4/spring-framework-reference/html/web-reactive.html 它指出我可以在控制器中处理POST请求,例如: 虽然这似乎不起作用。这里是我实现的

    • 问题内容: 我尝试建立一个非常简单的网站,在该网站中可以将数据添加到sqlite3数据库中。我有两个文本输入的POST表单。 index.html: forms.py: views.py: 但是,当我单击“提交”按钮时,出现403错误: 我已经包含{% csrf_token %}在index.html中。但是,如果这是一个RequestContext问题,我真的不知道在哪里以及如何使用它。我希望所

    • 我有一个REST API使用POST调用来创建记录,我希望在POST调用中传递某些对象,如果缺少任何东西,我必须直接拒绝它们的唯一, 但是,当使用丢失的属性进行Post调用时,我可以在MongoDB中创建一个条目,我不想保留它,因为这不是一个正确的请求,@validation对我来说不起作用,我正在使用spring boot 2.0.6和MongoDB 4.0.4,任何帮助都非常感谢。提前感谢

    • 我正在使用Spring引导应用程序连接MongoDB实例。我们已在MongoDB上启用了以下角色的身份验证 角色:[ { role: "dbOwner ",db: "{{ mongo.database_name }}" } 角色:[ { role: "readWrite ",db: "{{ mongo.database_name }}" } 我们使用conf文件提供凭证 数据: mongodb。u

    • 我想用注释验证我的请求体,但是它在Spring Boot中不起作用 我在JAR文件中有一个请求类,我不能用两个字段来修改它。一个字段的类型为Object。我的控制器类接受这个类对象作为请求主体。当我将下面的JSON传递给控制器时,验证不起作用。下面是代码示例。 请求类: 另一类: 控制器类: 呼叫代码设置请求如下: 这是我发出的请求: 超过64个字符的firstName: 示例JSON: 如果不包