我是Spring boot新手,我对请求字段验证有一个问题。我想出了如何在字段级别使用注释来指定自定义错误消息:
public class EmployeeRequest {
@NotEmpty( message = "field name cannot be empty" )
@NonNull
private String name;
@NotEmpty( message = "field address cannot be empty" )
@NonNull
private String address;
}
但是为了使用这些注释,我必须为每个请求类中的每个字段指定错误消息。此外,出于某种原因,我得到的回答也不是很明确:
“org.springframework.validation.BeanPropertyBindingResult:1错误\n字段“name”上的对象“employeeRequest”中的字段错误:拒绝值[null];代码[NotEmpty.employeeRequest.name,NotEmpty.name,NotEmpty.java.lang.String,NotEmpty];参数[org.springframework.context.support.DefaultMessageSourceResolvable:code[employeeRequest.姓名,姓名];论点[];默认消息[名称];默认消息[提供名称]“
假设所有字段必须是NotEmpty
和NonNull
,是否有更优雅、更通用的方法来对每个请求进行字段验证?
public class EmployeeController {
@PostMapping("/test")
@ResponseBody
public EmployeeResponse testMethod(@RequestBody EmployeeRequest request) {
genericFieldsValidatorForAllRequests(request);
doSomeStuffIfRequestIsValid(request);
}
有人能提供一些想法如何实现请求验证器吗?
你好像问了两个问题,希望我能试着回答这两个问题。
默认情况下,Spring Boot会捕获web请求处理程序中抛出的任何未捕获异常(例如@RequestMapping
,@GetMapping
,等等)并将其转换为以下结构的JSON响应:
{
"timestamp": 1500597044204,
"status": 400,
"error": "Bad Request",
"exception": "org.springframework.http.converter.HttpMessageNotReadableException",
"message": "JSON parse error: Unrecognized token .....",
"path": "/birds"
}
让错误响应JSON看起来不同的一种方法是创建一个异常处理程序。基本上,您可以在错误转到Spring Boot的默认错误处理程序之前捕获所需的错误。要做到这一点,你可以在同一个包装中或比控制器更高的杠杆包装中制作一个:
@ControllerAdvice
public class GlobalErrorHandler {
@ExceptionHandler(ExceptionICareAbout.class)
public MyErrorResponseObject handleExceptionICareAbout(ExceptionICareAbout e) {
return new MyErrorResponseObject(<ADD CODE HERE>)
}
}
在您的例子中,您可以为MethodArgumentNotValidException
创建一个异常处理程序,并将其转换为您喜欢的错误响应。(我认为这是JSR303注释验证失败时引发的异常,但请仔细检查我)
您还可以将错误响应对象包装在ResponseEntity中
此外,如果您想捕获每个异常并阻止它们进入Spring Boot的默认异常处理程序,只需为
异常
类本身创建一个异常处理程序,例如@ExceptionHandler(exception.class)
。
在你关心的每个对象上使用JSR303注释(
@NotNull
,@size
,等等),并结合@Valid
注释是我所知道的最好的方法。我会花时间思考重用代码和错误消息的方法,但这是我能想到的全部。也许我们可以在评论中得到一些好的答案。
Spring确实提供了这些你可以代替JSR303注释的验证器,但是我对它们没有太多的经验。
我想验证我的控制器中的一个请求参数。请求参数应该来自给定值列表中的一个,如果不是,则应该抛出错误。在下面的代码中,我希望请求参数orderBy来自@Values准许中存在的值列表。 我已经编写了一个自定义bean验证器,但不知何故,它不起作用。即使我为查询参数传递任何随机值,也不会验证并引发错误。
如何使用自定义请求进行验证,我的请求使用数组键 [编辑][代码更新]显示错误: 传递给App\Http\Controllers\Controller::validate()的参数1必须是给定数组的Illumbite\Http\Request的实例,
表单验证发生在数据验证之后。如果你需要定制化这个过程,有几个不同的地方可以修改,每个地方的目的不一样。表单处理过程中要运行三种类别的验证方法。它们通常在你调用表单的is_valid() 方法时执行。还有其它方法可以触发验证过程(访问errors 属性或直接调用full_clean() ),但是通用情况下不需要。 一般情况下,如果处理的数据有问题,每个类别的验证方法都会引发ValidationErr
我正在开发spring mvc应用程序,我应该在spring mvc validator的基础上应用验证。第一步,我为类和设置控制器添加了注释,效果很好。现在我需要实现自定义验证器来执行复杂的逻辑,但我想使用现有的注释并添加额外的检查。 我的用户类: 我的验证器: 我的控制器: 那么,有可能同时使用自定义验证器和注释吗?如果是,怎么做?
要通过Amazon SES发送电子邮件,用户需要验证: 发件人电子邮件地址/域和 收件人电子邮件地址 由于我有生产访问权,问题2已得到解决,但要验证发件人电子邮件地址/域,我需要通过SES控制台或api发送请求。亚马逊反过来会向发件人的电子邮件地址发送一封验证电子邮件。 问题:是否可以自定义Amazon SES发送的地址验证请求电子邮件?我搜索了一下,没有找到任何与此相关的文档。在这方面,我将不胜
我使用的是spring security 3.1.3。在我正在开发的应用程序中,当用户尝试登录时,除了检查用户名和密码外,我还需要进行额外的检查以验证他们的帐户(特别是,他们的帐户没有一个标志集,表明他们被禁止登录)。我不知道最好的办法是什么。 我应该创建一个身份验证过滤器bean,并将其包含在SpringXML中的表单登录元素中吗?或者,我应该使用仅在用户成功满足用户名/密码要求时才运行的身份验