【发布时间】:2020-10-10 11:16:56
【问题描述】:
我有一个 POJO 类及其 API 方法。我想验证用户字段输入,但它似乎不起作用。我在 POJO 类中使用了 @Size() 注释,但它不起作用。下面是我的逻辑结构的sn-p。
POJO 类
@Entity
public class Address {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long addressId;
@NotNull
@Size(min=10, max=100, message="Please enter between {min}-{max} characters")
private String addressLine;
API 类方法
@PostMapping(value="/add", produces = MediaType.APPLICATION_JSON_VALUE, consumes=MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody String addAddress( @RequestBody @Valid Address address, BindingResult result)
{
if(result.hasErrors()) {
return ErrorUtils.customErrors(result.getAllErrors());
} else {
return addressService.addAddress(address);
}
}
我正在为 addAddress (/add) 方法创建 JSON 请求,并在 UI 表单中提示错误。我的 JSON 响应处理程序位于 jquery 验证器中,如下所示..
function saveRequestedData(frm, data, type) {
$.ajax({
contentType:"application/json; charset=utf-8",
type:frm.attr("method"),
url:frm.attr("action"),
dataType:'json',
data:JSON.stringify(data),
success:function(data) {
if(data.status == "success") {
alert(data.message);
toastr.success(data.message, data.title, {
closeButton:true
});
fetchList(type);
}
else {
toastr.error(data.message, data.title, {
allowHtml:true,
closeButton:true
});
}
}
});
}
似乎只有@NotNull 似乎工作而不是@Size 和@Valid 注释。 根据 Spring Boot 发布说明,从版本 2.3.0.RELEASE Spring Boot Web 和 WebFlux 启动器不再依赖于验证启动器,所以我在我的 pom 中添加了 spring-boot-starter-validation .xml 手动。 但似乎没有任何效果。
【问题讨论】:
-
你在班级级别添加了@Validated 吗?
-
@SSK 我没有,因为我已经在 API 类方法中提到了
@Valid。但是我也尝试了您的建议,方法是在我的控制器类级别中使用@Validation。但它没有用。 -
这是来自
org.springframework.validation.annotation.Validated;的@Validated -
@SSK 使用了
@validated,但它没有像这样工作 -->@Controller @RequestMapping("add") @Validated public class AddressController { -
您需要在班级级别使用它。添加代码作为参考答案
标签: jquery spring-boot validation