java - 在 Spring MVC 中同时处理文件和文本输入字段

标签 java spring spring-mvc spring-boot httprequest

我有一个文件输入和文本输入的集合。每个文件输入都有一个相应的类型字段。我需要将这两个值作为列表检索。目前,我尝试过以下操作:

Controller 代码:

@RequestMapping(value = "/{id}", method = RequestMethod.POST)
public OutletIndex updateOutlet(@PathVariable String id,
                                @ModelAttribute @Valid OutletIndex outlet,
                                @RequestParam(value = "file", required = false) List<MultipartFile> file,
                                @RequestParam(value = "types", required = false) List<MultipartFile> types,
                                HttpServletRequest request
) {
    //......
}

HTML 代码:

<input type="text" name="types"/>
<input type="text" name="types"/>
<input type="text" name="types"/>
<input type="text" name="types"/>
<input type="file" name="file"/>
<input type="file" name="file"/>
<input type="file" name="file"/>
<input type="file" name="file"/>
<小时/>

如果文件输入选择任何文件,则效果良好。如果我们不选择任何文件,它不会显示在列表中,但文本输入会显示,即使它是空的。我该如何解决这个问题?

我还尝试使用 request.getParameterMap() 获取值,但两种方法的结果是相同的。

当我选择 2 个文件时,输出会是这样的。

enter image description here

types 列表大小为 4file 列表大小为 2

如果没有选择文件,我可以在列表中将其设置为null吗?

最佳答案

执行此操作的最佳方法是让 POJO 映射文件和文本输入。我不确定您想要实现什么,但这可能会对您有所帮助..

你的pojo

public class FileWrapper {
private MultipartFile file;

private String type;

public MultipartFile getFile() {
    return file;
}

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

public String getType() {
    return type;
}

public void setType(String type) {
    this.type = type;
}
}

你的 Controller

@RequestMapping(value = "/file", method = RequestMethod.POST)
public OutletIndex updateOutlet(@ModelAttribute List<FileWrapper> fileWrapper) {
    // ......

    for (FileWrapper file : fileWrapper) {

        if (file.getFile() != null && StringUtils.isNotEmpty(file.getType())) {
            // your logic
        }
    }

}

你的jsp文件

<form method="post" action="/file" modelAttribute="fileWrapper">
    <input type="text" name="types[0]" /> <input type="text"
        name="types[1]" /> <input type="text" name="types[2]" /> <input
        type="text" name="types[3]" /> <input type="file" name="file[0]" /> <input
        type="file" name="file[1]" /> <input type="file" name="file[2]" /> <input
        type="file" name="file[3]" />
</form>

这对您来说应该很舒服。可以尝试一下。

关于java - 在 Spring MVC 中同时处理文件和文本输入字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41221557/

相关文章:

java - 如何在jshell中为spring项目设置类路径

java - Spring : injecting data object in service

java - appCtx 中的多个事务遇到 NoUniqueBeanDefinitionException

java - 使用 @PathVariable 重定向到另一个 Controller

java - Spring - 注入(inject) Autowiring 依赖项失败

java - 如何在单击 JButton 后添加显示 "OK"和 "Cancel"的面板?

java - 将 MySQL 数据库拆分为单独的数据库

java - 如何使用 spark UDF 返回复杂类型

java - 如何从遍历对象的ArrayList中调用抽象方法?

java - 我无法创建自定义的Spring Boot启动器