찾다

 >  Q&A  >  본문

java - SpringMvc Post表单数据的一个问题

spring-mvc 前端post表单数据到后台,后台没有接收到,并且用HttpServletRequest获取参数列表为空,下面为代码:

web.xml:

<servlet>
        <servlet-name>embers</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:conf/embers-mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
        <async-supported>true</async-supported>
    </servlet>

    <servlet-mapping>
        <servlet-name>embers</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>

mvc配置文件:

<context:component-scan base-package="embers.blog.controller" />

controller:

@Controller
public class BugTestController {
    
    
    @RequestMapping(value="/demo",method=RequestMethod.POST)
    public String demo(HttpServletRequest request,HttpServletResponse response) throws IOException{
        System.out.println(request.getParameterMap());
        System.out.println(request.getParameter("username"));
        System.out.println(request.getParameter("password"));
        System.out.println(request.getContentType());
        System.out.println("//");
        response.setContentType("text/html");
        response.getWriter().println("keke");
        response.getWriter().flush();
        response.getWriter().close();
        return null;
    }
}

我已经调试过无数次了,如果设定为GET方法,然后把参数放在URL上是完全没有问题的,用json提交,配置json转换也是没有问题的,就是默认的POST表单数据有问题,下面是调试工具生成的表单完整报文:

POST /BugTest/rest/demo HTTP/1.1
Host: 127.0.0.1:8080
Content-Type: application/x-www-form-urlencoded
Cache-Control: no-cache

username=111wqfewrf&password=321&=

一直都是好好的,这么简单的demo,现在突然不行了,好久没写springmvc了,我漏了什么吗?

大家讲道理大家讲道理2766일 전806

모든 응답(2)나는 대답할 것이다

  • 天蓬老师

    天蓬老师2017-04-18 10:17:17

    그런데 springmvc의 Annotation인 RequestParam을 사용해도 얻을 수 없고 전체 폼 데이터가 비어 있다

    문자별로 메시지를 작성하는 도구를 사용했습니다. jsp로도 시도했는데 동일한 400이 나왔습니다.

    으아아아

    반환 오류:

    으아아아

    브라우저 디버깅, 메시지 전송됨:

    으아아아

    백그라운드에서 HttpServelet을 사용하여 실제로 application/x-www-form-urlencoded인 ContentType을 가져오지만 전체 ParameterMap 또는 단일 매개변수를 가져옵니다. 둘 다 비어 있고 본문도 가져오고 비어 있습니다. 하지만 GET으로 변경하고 매개변수를 url에 넣으면 전혀 문제가 없습니다



    오늘 회사에 도착해서 코드를 다시 입력했는데 회사에서 똑같은 코드를 받을 수 있는데, 모든 테스트를 통과했는데 왜 집에서 받을 수 없는지 이유를 모르겠습니다. :
    예비 회사에서 사용하는 tomcat 버전이 8.0.29라서 버그가 발생한 것으로 추정됩니다. 오늘 밤에 집에 가서 tomcat 버전을 확인해 보겠습니다. 이번 버전의 버그 목록

    지속적인 업데이트. . .



    Tomcat8.0.29에서 수정된 버그입니다. 물론 REST 작성시 주의하시기 바랍니다.

    회신하다
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:17:17

    양식은 어떻게 되나요? 해당 필드가 양식에 기록되어 있습니까?

    회신하다
    0
  • 취소회신하다