【发布时间】:2015-09-22 16:34:31
【问题描述】:
如果表单字段为空,我在执行 AJAX 发布时收到 400 Bad request。但是,当我在该字段中键入任何值时,我会提交服务器能够处理它的请求。
我附上了两种情况的截图(成功和失败)
这正常吗?
控制者
@RequestMapping(value = "/ajax/setsponsor", method = RequestMethod.POST)
@ResponseBody
public ValidationResponse updateSponsorTab(@Valid SetSponsorBO setSponsorBO, Locale locale,BindingResult result) {
ValidationResponse res = new ValidationResponse();
List<ErrorMessage> errorMesages = new ArrayList<ErrorMessage>();
if (!result.hasErrors()) {
res.setStatus(messageSource.getMessage("success.message", null, locale));
try{
res.setValue(myAccountService.updateSponsor(setSponsorBO));
if(!res.getValue().equalsIgnoreCase(messageSource.getMessage("success.message", null, locale))){
res.setStatus("FAIL");
}
}catch(Exception ex){
System.out.println("Error AccountController set sponsor : " + ex.getMessage());
res.setValue(messageSource.getMessage("failed.message", null, locale));
res.setStatus("FAIL");
}
} else {
res.setStatus("FAIL");
List<FieldError> allErrors = result.getFieldErrors();
for (FieldError objectError : allErrors) {
errorMesages.add(new ErrorMessage(objectError.getField(),
objectError.getDefaultMessage()));
}
res.setValue(messageSource.getMessage("failed.message", null, locale));
}
res.setErrorMessageList(errorMesages);
return res;
}
【问题讨论】:
-
这取决于您如何将数据放入服务器。如果有这样的事情:
data: { sponsorUsername:'', securityPassword:'' },不会有问题......但是,我认为它正在发生的事情:data: { sponsorUsername: securityPassword: },或者类似的东西......这样,sponsorUsername将具有价值securityPassword,但是securityPassword变量将不存在... -
看到控制器,可能是
@Valid注解...SetSponsorBO对这些参数有哪些验证? -
@NotBlank 和 @Length(max=100) 两个字段
-
如果您删除
@NotBlank,它可能会起作用。也许在这种情况下,您必须检查方法内是否为空白。 -
删除@NotBlank 是对的。但是为什么会这样呢?
标签: spring-mvc