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

SpringBoot REST Api JSON验证

柳英资
2023-03-14

我有一个简单的springboot应用程序和一个Rest api。我想验证请求参数不为null/空。我将json转换成一个java对象,并从这里开始验证它们是否包含所有必需的字段,并且不为null或不为空。(对象没有保存到db)我目前正在使用javax验证方法,但是没有成功。

@RestController
public class GardenController{

@PostMapping(value = "/submit")
public ResponseEntity submit(
        @RequestPart(value="garden", required=true) Garden garden
) throws Exception { 
}
}

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Getter;
import lombok.Setter;

import javax.validation.constraints.NotEmpty;
import java.util.Arrays;


@Getter
@Setter
public class Garden{

public Garden( String[] address, String area, String location, Feature
feature) {
    this.address= address;
    this.area= area;
    this.location= location;
    this.feature= feature;
}

public Garden() {
}

@JsonProperty("address")
@NotEmpty(message = "address is required")
private String [] address = null;

@JsonProperty("area")
@NotEmpty(message = "area is required")
private String area= null;

@JsonProperty("location")
@NotEmpty(message = "location is required")
private String location= null;

@JsonProperty("feature")
@NotEmpty(message = "feature is required")
private Feature feature= null;

我还有一个包含的要素类,我需要验证(所有字段均为必填字段,而不是空或空)

import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotEmpty;

@Getter
@Setter
public class Feature {

public Feature () {
}

public Feature (String construction, String type) {
    this.construction = construction;
    this.type = type;
}

@NotEmpty(message = "construction is required")
private String construction;

@NotEmpty(message = "type is required")
private String type;

}

共有1个答案

雍兴修
2023-03-14

您应该将控制器类注释为@Validated,并将@Valid注释添加到请求参数中:

import org.springframework.validation.annotation.Validated;
import javax.validation.Valid;
// ...
@RestController
@Validated
public class GardenController{

    @PostMapping(value = "/submit")
    public ResponseEntity submit(
        @RequestPart(value="garden", required=true) @Valid Garden garden
    ) throws Exception { 
    }
}
 类似资料:
  • 接口说明 验证验证码 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 如开启https功能,请求地址的协议应改为https,如:https://www.example.com/wish3dearth/api/access/v1.0.0/getLicenseInfo API地址 GET /authcenter/api/verify/v1.0.0/check

  • 我需要应用一个双值验证,这需要与圆周率匹配。我正在考虑使用@pattern(regex=“3.14159265359”)。这是使用Hibernate验证约束应用这样一个约束的最佳方式吗?谢谢

  • 我现在把这两者搞混了。我知道Hibernate Validator6是Bean验证2.0规范的参考实现。它支持分组、错误消息国际化、自定义方法验证等。问题是Spring5支持这些特性还是我只剩下Hibernate Validator6了? 网上所有的参考例子都建议使用Hibernate验证器,没有什么关于Spring验证的发现,请建议或指向其他链接。

  • 我有以下场景:我正在尝试处理一个表单,模型属性是一个具有String和Long属性的bean。众所周知,bean验证提供了很多注释来帮助我们确定数据的有效性。我面临的是,对于Long属性的情况,我只能使用@NotNull和另一个注释(我不记得它的名字)来强制用户输入正数。如果用户输入例如“sdf”,应用程序会抛出一个BIG异常。所以我想知道的是,如果用户在爆炸前输入了一个数字(因为我不能使用@Pa

  • 我刚接触vee validate。我想知道您如何验证按钮是否已按下。我已经用ValidationObserver包装了我的表单,其中有一个v形槽无效。我希望用户被要求选择一个按钮,这将允许用户继续到下一页。 代码验证观察员,我包装我的表单: 下面的代码是我需要知道如何设置用户从列表中选择按钮所需的验证。 和结束我的形式我有按钮,允许用户继续。该按钮将被禁用,直到表单完成并且没有验证错误。但我也想确

  • 我已经使用extend from创建了自定义规则。所以我有这个 当为false且为true时,从上述代码中,它会被上一条规则覆盖,因此结果始终被视为true而不是false 那么我如何才能做到这一点呢? 规则:

  • 我正在测试带注释的javax验证。它们在应用程序中工作良好,方法参数上有注释。但是当我试图通过手动构建验证工厂来测试它们时 我得到以下错误。 javax。验证。ValidationException:HV000183:无法初始化“javax”。艾尔。“表达工厂”。检查类路径上是否有EL依赖项,或者改用ParameterMessageInterpolator 收到这个错误后,我在gradle文件中添

  • 我读过很多关于这方面的帖子,但我无法解决我的问题。当我试图验证zend表单验证码时,即使文本正确,也总是失败。下面是我的代码: 谢谢你的时间和帮助!! 我看到了一些不可靠的东西:当我在联系人操作中转储$_post时,我的结果是: 我刚刚输入的验证码甚至出现了,取而代之的是验证码凯!!?? 我觉得我需要删除这个captchaField,但不知道如何到目前为止! 我可以用JS做到这一点,但必须有一个干