recherche

Maison  >  Questions et réponses  >  le corps du texte

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了,我漏了什么吗?

大家讲道理大家讲道理2803 Il y a quelques jours837

répondre à tous(2)je répondrai

  • 天蓬老师

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

    Au fait, même si vous utilisez l'annotation de springmvc : RequestParam, vous ne pouvez pas l'obtenir et toutes les données du formulaire sont vides

    J'ai utilisé un outil pour écrire le message caractère par caractère. Je l'ai également essayé avec jsp et j'ai obtenu le même 400

    <form action="${pageContext.request.contextPath }/demo.ember" method="post">
            <input type="text" name="username"/>
            <input type="text" name="password"/>
            <input type="submit" value="提交"/>
    </form>

    Erreur de retour :

    HTTP Status 400 - Required String parameter 'username' is not present

    Débogage du navigateur, message envoyé :

    Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    Accept-Encoding:gzip, deflate
    Accept-Language:en-US,en;q=0.8
    Cache-Control:max-age=0
    Connection:keep-alive
    Content-Length:26
    Content-Type:application/x-www-form-urlencoded
    Cookie:JSESSIONID=7872810B7BE203B784A906C3D49418D1
    Host:localhost:8080
    Origin:http://localhost:8080
    Referer:http://localhost:8080/BugTest/demo.jsp
    Upgrade-Insecure-Requests:1
    User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.97 Safari/537.36
    
    username=wsa&password=esdx
    

    En arrière-plan, utilisez HttpServelet pour obtenir le ContentType, qui est bien application/x-www-form-urlencoded, mais récupérez l'intégralité du ParameterMap ou un seul paramètre, les deux sont vides, récupérez le corps, il est également vide, mais changez-le en GET, et mettez les paramètres dans l'url, pas de problème du tout



    Je suis arrivé à l'entreprise aujourd'hui et j'ai tapé à nouveau le code. L'entreprise peut obtenir exactement le même code, et tous les tests sont réussis. Je ne sais pas pourquoi je ne peux pas l'obtenir à la maison. :
    Préliminaire On estime que le bug est causé par la version de Tomcat. La version de Tomcat utilisée dans l'entreprise est la 8.0.29. Je ne connais pas la maison. Je reviendrai ce soir pour vérifier la version de Tomcat. la liste des bugs de cette version

    Mises à jour continues. . .



    C'est corrigé. C'est un bug dans tomcat8.0.29. Veuillez faire attention lorsque vous utilisez les données du formulaire. Bien sûr, ne vous inquiétez pas de l'écriture de REST

    .

    répondre
    0
  • 伊谢尔伦

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

    Et le formulaire ? Êtes-vous sûr que ces champs sont renseignés dans le formulaire ?

    répondre
    0
  • Annulerrépondre