gpt4 book ai didi

java - spring 3 带文件上传的自动表单字段验证

转载 作者:行者123 更新时间:2023-11-29 03:37:51 26 4
gpt4 key购买 nike

我将 JSR 303 验证与 hibernate validator 结合使用,通过在 Controller 方法上指定 @Valid 来自动验证字段。验证工作正常。我知道在表单中添加了一个上传字段,并添加了一个 @RequestParam("file") 作为 MultipartFile 文件。现在只有当所有字段在提交时都有效时它才有效,否则我会收到 404(错误请求)。如果我删除 @Valid 注释,我会得到 javax.validation.ConstraintViolationException 以及状态为 500 的所有验证违规。

我正在使用 Spring 3.2

我的表单:

    <form action="#springUrl("/admin/stores/save")" method="POST" enctype="multipart/form-data">
Name:
#springBind( "store.name" )
<input type="text"
name="${status.expression}"
value="$!status.value" /><br>
......
<input type="file" name="file" accept="image/*">

<input type="submit" value="submit"/>
</form>

Controller :

@RequestMapping(value="/save", method = RequestMethod.POST)
@Transactional
public String save(@Valid @ModelAttribute Store store, @RequestParam("file") MultipartFile file, BindingResult bindingResult, ModelMap model) {
if (bindingResult.hasErrors()) {
model.addAttribute("message", "Failed");
model.addAttribute("store", store);
return "admin/stores/form";
} else {
.....

最佳答案

您的问题出在方法参数顺序上。 @ModelAttribute 必须后跟 BindingResult 参数。看Spring documentation并检查示例 17.1。 BindingResult 和 @ModelAttribute 的排序无效

.您还应该将 MultipartFile 添加到表单类 (Store) 中(如果它是其中的一部分)。

Store {

/* Your other fields */

@NotNull
private MultipartFile file;

public MultipartFile getFile() {
return file;
}

public void setFile(MultipartFile file) {
this.file= file;
}
}

关于java - spring 3 带文件上传的自动表单字段验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14567912/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com