hibernate.validator.fail_fast序列 [英] hibernate.validator.fail_fast Sequence

查看:275
本文介绍了hibernate.validator.fail_fast序列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述









我的问题是我得到验证错误一个接一个,但不是按顺序。
所以,任何好友都可以根据用户的需要告诉我如何显示错误,按Sequence。

因此,我希望这是你想要的,或至少推动你在正确的方向:

在我的控制器中,我有以下方法:

  @RequestMapping(value =/ test / createEntry,method = RequestMethod.POST)
@ResponseBody
public void doAndValidateSomething(@RequestBody @ Valid ValidationFormModel,
HttpServletResponse响应){
try {
testService.doSomething(model);
} catch(NormalException e){
log.error(String.format(Error doing something!Values - > name:%s,address:%s,
model.getName (),model.getAddress(),e);
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
}

这是我的异常处理程序(用于控制器中)注意行 e.getBindingResult.getAllErrors()在这里,它给出了所有错误的列表,在我的情况下,我决定只通过 iterator.next()使用第一个错误,但这只是想通过我可以自由使用 getAllErrors()

  @ExceptionHandler (MethodArgumentNotValidException.class)
public void validationException(MethodArgumentNotValidException e,HttpServletResponse response)throws IOException {
response.getWriter()。append(e.getBindingResult()。getAllErrors()。iterator()。next ).getDefaultMessage());
log.error( 验证失败!,e);
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
}

我的模特看起来有点像这样:

  import org.hibernate.validator.constraints.Length; 
import org.hibernate.validator.constraints.NotEmpty;

import javax.validation.constraints.Pattern;

public class ValidationFormModel {

@Length(max = 50,min = 2,message =...)
@NotEmpty(message =。 ...)
私有字符串名称;

@Length(max = 250,min = 1,message =...)
私有字符串地址;
//构造函数,getters和setter ...
}

客户端,我使用以下jquery / json通过post发送我的数据并显示实际错误。在您的错误处理程序中,您可以根据需要更改逻辑(我假设您希望直接在表单输入字段中显示每个错误):

  var approveNewSend = function(){
var newEntry = JSON.stringify({
name:$('#nameInput')。val(),
}) ;

$ .ajax({
url:$ {pageContext.request.contextPath} / test / createEntry,
类型:POST,
data: newEntry,
contentType:application / json; charset = utf-8,
dataType:json
})
.success(function(){
console.log('yay!');
})
.error(function(data){
$(#nerrorMessage)。html(Error validating:+ data。 responseText);
});
};

希望这有助于您!随意问问是否有什么不清楚。


My problem is that i am getting Validation error one by one, But not in sequence. So can any buddy tell me how to display error, in Sequence according to user need.

解决方案

So, I hope this is what you want or at least pushs you in the right direction:

In my controller, I have the following method:

@RequestMapping(value = "/test/createEntry", method = RequestMethod.POST)
@ResponseBody
public void doAndValidateSomething(@RequestBody @Valid ValidationFormModel, 
                                        HttpServletResponse response) {
    try {
        testService.doSomething(model);
    } catch (NormalException e) {
        log.error(String.format("Error doing something! Values -> name: %s, address: %s",
                model.getName(), model.getAddress(), e);
        response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
    }
}

And this is my exception handler (used in controller, too). Note the line e.getBindingResult.getAllErrors() here, which gives you a list of all errors. In my case, I decided to use only the first error via iterator.next(), but this is just wanted by me, feel free to use getAllErrors() only:

@ExceptionHandler(MethodArgumentNotValidException.class)
public void validationException(MethodArgumentNotValidException e, HttpServletResponse response) throws IOException {
    response.getWriter().append(e.getBindingResult().getAllErrors().iterator().next().getDefaultMessage());
    log.error("Validation failed!", e);
    response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
} 

My model looks somewhat like this:

import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotEmpty;

import javax.validation.constraints.Pattern;

public class ValidationFormModel {

    @Length(max=50,min=2, message= "...")
    @NotEmpty(message = "....")
    private String name;

    @Length(max=250,min=1, message= "...")
    private String address;
    //constructor, getters and setters...
}

And on client side, I use the following jquery / json to send my data via post and show the actual error. In your error handler, you could change the logic according to your need (I assume you want to show every error directly at the form input field or something):

var approveNewSend = function () {
    var newEntry = JSON.stringify({
        name: $('#nameInput').val(),
    });

    $.ajax({
        url: "${pageContext.request.contextPath}/test/createEntry",
        type: "POST",
        data: newEntry,
        contentType: "application/json; charset=utf-8",
        dataType: "json"
    })
            .success(function () {
                console.log('yay!');
            })
            .error(function (data) {
                $("#nerrorMessage").html("Error validating: " + data.responseText);
            });
};

Hope this helps! Feel free to ask if something's not clear.

这篇关于hibernate.validator.fail_fast序列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆