当前位置: 首页 > 面试题库 >

SpringMVC-FileUpload-客户端发送的请求在语法上不正确

廖君昊
2023-03-14
问题内容

我在同一个主题上看过几个qts。但是我没有发现此错误的任何线索。

我正在研究POC,并点击下面的链接。 http://spring.io/guides/gs/uploading-
files/

如以上教程中所述,在独立模式下(春季嵌入式Tomcat),它可以正常工作。但是我想将其部署为Web应用程序。因此,我创建了一个单独的SpringMVC项目并添加了以下控制器。

控制器文件

@Controller
public class FileUploadController {

    @RequestMapping(value="/upload", method=RequestMethod.GET)
    public @ResponseBody String provideUploadInfo() {
        return "You can upload a file by posting to this same URL.";
    }

    @RequestMapping(value="/upload", method=RequestMethod.POST)
    public @ResponseBody String handleFileUpload(@RequestParam("name") String name, 
            @RequestParam("file") MultipartFile file){
        if (!file.isEmpty()) {
            try {
                byte[] bytes = file.getBytes();
                BufferedOutputStream stream = 
                        new BufferedOutputStream(new FileOutputStream(new File(name + "-uploaded")));
                stream.write(bytes);
                stream.close();
                return "You successfully uploaded " + name + " into " + name + "-uploaded !";
            } catch (Exception e) {
                return "You failed to upload " + name + " => " + e.getMessage();
            }
        } else {
            return "You failed to upload " + name + " because the file was empty.";
        }
    }

}

我已经编写了以下客户端(因为我不想在这里使用RestTemplate)。

服务客户

private static final String URL_GET = "http://localhost:8080/SpringMVC/upload";
static String URL = "http://localhost:8080/SpringMVC/upload";

public static void main(String[] args) throws Exception {
    PropertyConfigurator.configure("C:/DevEnvProject/eclipse/workspace_exp/OCR/log4j.properties");
    testGet();
    testPOST();
}

private static void testGet() throws ClientProtocolException, IOException {
    HttpClient httpClient = new DefaultHttpClient();
    HttpContext localContext = new BasicHttpContext();
    HttpGet httpGet = new HttpGet(URL_GET);
    HttpResponse response = httpClient.execute(httpGet, localContext);

    BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
    String sResponse = reader.readLine();

}

static void testPOST() {
    try {
        HttpClient httpClient = new DefaultHttpClient();
        HttpContext localContext = new BasicHttpContext();
        HttpPost httpPost = new HttpPost(URL);

        MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);

        entity.addPart("name", new StringBody("testIcon.png"));
        entity.addPart("file", new FileBody(new File("C:/testIcon.png")));
        httpPost.setEntity(entity);
        HttpResponse response = httpClient.execute(httpPost, localContext);


        BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
        String sResponse = reader.readLine();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

我无法成功调用POST端点。每次,我都会遇到以下异常。

400错误的请求-客户端发送的请求在语法上不正确

‘GET’通话正常。我将“ POST”请求的日志与我在春季教程中提到的使用独立方法进行测试时得到的“
POST”请求的日志进行了比较。在请求部分未找到任何差异。

我知道我在这篇文章中很冗长。我想提供尽可能多的上下文信息。请帮忙。

谢谢


问题答案:

您需要做两件事:

首先,将Apache Commons
FileUpload库添加到您的类路径。如果使用maven,则可以在此处获取依赖项。如果没有,您仍然可以下载jar并手动添加。

其次,您必须MultipartResolver在上下文中使用name 声明一个bean multipartResolver。通过Apache
Commonds FileUpload,您可以使用CommonsMultipartResolver。例如,使用Java配置,那将是

@Bean(name = "multipartResolver")
public CommonsMultipartResolver multipartResolver() {
    CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver(); 
    // set any fields
    return commonsMultipartResolver; 
}

使用XML配置,

<bean id="multipartResolver"
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

    <!-- set any properties -->
</bean>

在Spring官方文档中有进一步的记录。



 类似资料:
  • 我希望在调试这个问题时得到一些帮助。如果我将以下JSON发送到后端,它将正常工作: 但是,如果我现在发送以下内容: 我得到了上面的错误。在我的后端代码中,我有以下代码: API 方法签名如下所示: 我认为我遇到的问题是JSON不能被解析为ZonedDateTime。有人对以下两个问题有什么建议吗?( json字符串格式ZonedDateTime自动接受什么时间,( 2)如何创建DTO来解析zone

  • 我在这个问题上花了很多时间,但无法解决它。请帮忙!当我从JSP提交表单时,我得到了这个错误。我的代码: 和我的控制器代码: }

  • 问题内容: 嗨,我在重定向期间收到了下一个错误: 客户端发送的请求在语法上不正确 浏览器显示的URL是:在这里,我的类首先重定向-“从”重定向,然后“重定向到”: 第二类: 解决 :我解决了这个问题,第二类的方法中有多余的参数。 问题答案: 在这种情况下,将登录级别设置为in 例如,当缺少参数或无法将其转换为所需的类型时,日志中将出现异常详细信息。

  • 这是我的控制器 我的豆子是 当我给出的名称介于5到45个字符之间时,表单将被验证。但当表单未被验证时,我会收到400状态错误报告。我不知道为什么我会出错。这里需要帮助吗

  • 我有一个表单,用户可以使用它将文件上传到本地驱动器,还可以将一些数据保存到数据库中。但是出现了这个错误消息,我想知道如何处理它。 控制器 形式本身 我试图先保存表单,我将使用单独的方法发送它。

  • 这里是LocationSearchMetaData.java 我的控制器 我的客户要求是这样的 下面是实际数据请求 获取时出错I: