java - Spring/Jboss - 当前请求不是多部分请求

标签 java spring spring-mvc tomcat jboss

我正在尝试创建一个休息网络服务,用户可以在其中发送带有一些参数的 httpPostrequest。这是我的代码

@RequestMapping(value="/SubmitDetails")
@ResponseBody
public String saveCase(@RequestParam("details") String details){
       //Do SomeWork
     return "some response";
}

但是当我从我的浏览器访问这个 URL 时它抛出:

exception

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.web.multipart.MultipartException: Current request is not a multipart request
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)

root cause

org.springframework.web.multipart.MultipartException: Current request is not a multipart request
    org.springframework.web.method.annotation.RequestParamMethodArgumentResolver.handleMissingValue(RequestParamMethodArgumentResolver.java:188)
    org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:104)
    org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121)
    org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:161)
    org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:128)
    org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:114)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
    org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)

此代码在 Tomcat 上运行良好,但在 JBOSS 4.2 上运行不佳

对于 Post 请求,我使用来自 Android 的 Volly:

void HttpStringRequest(final int request , String url, final Map<String,String> keyVal){

    StringRequest stringRequest = new StringRequest(request, url, new Response.Listener<String>() {

        @Override
        public void onResponse(String response) {
            Helper.getmHelper().v(this.getClass().getName()+":RESPONSE:",response);

            hideProgress();
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Helper.getmHelper().v(this.getClass().getName()+":ERROR:","Error");

            hideProgress();
        }
    }
    ) {
        @Override
        protected Map<String, String> getParams() {
            Iterator<Map.Entry<String, String>> it = keyVal.entrySet().iterator();
            while (it.hasNext()) {
                Map.Entry<String, String> pairs = (Map.Entry<String, String>) it.next();
                Helper.getmHelper().v(pairs.getKey(), pairs.getValue());
            }
            return keyVal;
        }

       @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            HashMap<String, String> headers = new HashMap<String, String>();
            headers.put("Content-Type", "text/plain; charset=utf-8");
            return headers;
        }


    };
    stringRequest.setRetryPolicy(new DefaultRetryPolicy(60*1000,0,DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
    queue.add(stringRequest);
}

最佳答案

检查Spring-Servlet.xml中是否添加了CommonsMultipartResolver

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

然后,将 enctype 添加到表单中的 multipart/form-data 中:

<form id="fileupload" method="post" enctype="multipart/form-data">

最后在Controller中,Request > MultipartHttpServletRequest:

@RequestMapping(value="/SubmitDetails"  method = RequestMethod.POST)
public String saveCase(MultipartHttpServletRequest request) {}

关于java - Spring/Jboss - 当前请求不是多部分请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42131266/

相关文章:

java - Android 和 Java 短裤

java - 使用 JSP 登录系统 - 忘记密码,使用 sql 数据库?

java - Java 9 spring boot 应用程序的 maven 构建期间的 RuntimeException

java - 如何将 "break"分解为需要花费太多时间才能完成该过程的方法?

java - 表格列表中的 Spring Thymeleaf

java - 子类实现上的@Required注解

java - 如何检测程序是否在 JAR 中运行?

java - DefaultMessageListenerContainer 不缩放

java - 在请求范围内使用工厂方法 Autowiring

java - Spring MVC @RequestMapping注解中Path和Variable的区别