Maison > Questions et réponses > le corps du texte
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了,我漏了什么吗?
天蓬老师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
.伊谢尔伦2017-04-18 10:17:17
Et le formulaire ? Êtes-vous sûr que ces champs sont renseignés dans le formulaire ?