SpringMVC 接受前端传递的数据
1、新建User.java
package pojo; public class User { private String name; private String pwd; private String sex; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } }
2、TestParamController.java文件
import java.util.Iterator; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import pojo.User; @Controller @RequestMapping("/param") public class TestParamController { /** * produces 设置返回参数的编码格式 可以设置返回数据的类型以及编码,可以是json或者xml * @ResponseBody 将java对象转为json格式的数据 */ private static Logger logger = LogManager.getLogger(TestParamController.class.getName()); /** * 普通方式,请求的参数名和Controller方法的参数一致 * @param name * @param pwd * @return */ @RequestMapping(value = "/add", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"}) @ResponseBody public String addUser(String name, String pwd) { logger.debug("name:" + name + ",pwd:"+pwd); return "name:" + name + ",pwd:" + pwd; } /** * 对象方式,请求的参数名和Controller方法中的对象的参数一致 * @param user * @return */ @RequestMapping(value = "/addByObject", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"}) @ResponseBody public String addUserByObject(User user) { logger.debug("name:" + user.getName() + ",pwd:" + user.getPwd()); return "name:" + user.getName() + ",pwd:" + user.getPwd(); } /** * 自定义方法参数名-当请求参数名与方法参数名不一致时 * @param u_name * @param u_pwd * @return */ @RequestMapping(value = "/addByDifName", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"}) @ResponseBody public String addUserByDifName(@RequestParam("name") String u_name, @RequestParam("pwd")String u_pwd){ logger.debug("name:" + u_name + ",pwd:" + u_pwd); return "name:" + u_name + ",pwd:" + u_pwd; } /** * 通过HttpServletRequest接收 * @param request * @return */ @RequestMapping(value = "/addByHttpServletRequest", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"}) @ResponseBody public String addUserByHttpServletRequest(HttpServletRequest request){ String name = request.getParameter("name"); String pwd = request.getParameter("pwd"); logger.debug("name:" + name + ",pwd:" + pwd); return "name:" + name + ",pwd:" + pwd; } /** *@PathVariable获取路径中的参数接收 * @param name * @param pwd * @return */ @RequestMapping(value = "/add/{name}/{pwd}", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"}) @ResponseBody public String addUserByPathVariable(@PathVariable String name, @PathVariable String pwd){ logger.debug("name:" + name + ",pwd:" + pwd); return "name:" + name + ",pwd:" + pwd; } /** * @RequestBody-JSON方式接收 * @param user * @return */ @RequestMapping(value = "/addByObjectJSON", produces = {"application/json;charset=UTF-8"}) @ResponseBody public String addUserByObjectJSON(@RequestBody User user){ logger.debug("name:" + user.getName() + ",pwd:" + user.getPwd()); return "name:" + user.getName() + ",pwd:" + user.getPwd(); } /** * RequestBody-JSON List对象方式 * @param users * @return */ @RequestMapping(value = "/addByListJSON", produces = {"application/json;charset=UTF-8"}) @ResponseBody public String addUsersByListJSON(@RequestBody List<User> users){ StringBuilder sb = new StringBuilder("{"); if(null != users){ for(User user : users){ sb.append("{" + "name:" + user.getName() + ",pwd:" + user.getPwd() + "}"); } } sb.append("}"); logger.debug(sb.toString()); return sb.toString(); } /** * RequestBody-JSON Map对象方式 * @param users * @return */ @RequestMapping(value = "/addByMapJSON", produces = {"application/json;charset=UTF-8"}) @ResponseBody public String addUsersByMapJSON(@RequestBody Map<String, User> users){ StringBuilder sb = new StringBuilder("{"); if(null != users){ Iterator it = users.keySet().iterator(); while(it.hasNext()){ User user = users.get(it.next()); sb.append("{" + "name:" + user.getName() + ",pwd:" + user.getPwd() + "}"); } } sb.append("}"); logger.debug(sb.toString()); return sb.toString(); } }
3、pom.xml文件
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <display-name>Archetype Created Web Application</display-name> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springContext.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springContext.xml</param-value> </context-param> <context-param> <param-name>log4jConfiguration</param-name> <param-value>classpath:log4j2.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> </web-app>
4、依次使用postman进行测试
5、另外这里对 http://localhost:8080/SpringReceive/param/addByObjectJSON.action 的测试需要注意,我在实验的过程中出现了415错误,找了许多解决,最终下面的方法解决
(1)需要在修改pom.xml
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.6</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.9.6</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.9.6</version> </dependency>
(2)修改SpringContext.xml文件,加入
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" /> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="messageConverters"> <list> <!-- 设置返回字符串编码 --> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <property name = "supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> <value>application/json;charset=UTF-8</value> </list> </property> </bean> <!-- json转换器 --> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> <value>application/json;charset=UTF-8</value> </list> </property> </bean> </list> </property> </bean>
(3)解决
参考:
前端向后端传递数据:https://www.cnblogs.com/mjs154/p/11667796.html
415错误解决:https://blog.csdn.net/weixin_39841589/article/details/82056337
积沙成塔