版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chenbetter1996/article/details/83832525
原始的Servlet API
在Model2编程时,作为控制器的Servlet交互JSON格式的方法如下
HttpServletRequest request;
HttpServletResponse response;
/*
获取前端发送的HTTP请求中参数,
JSON或者Form表单的都一样(根据name)
获取到的参数类型一定是字符串,要其它类型,需要转化
*/
String param1 = request.getParameter("param1Name");
int param2 = Integer.parseInt(request.getParameter("param2Name"));
/*
将数据以JSON格式封装起来添加到响应的HTTP中给前端
write()方法的参数没有JSON类型的,一般使用String,返回JSON字符串
*/
response.getWriter.write(JSONObject.fromObject(obj1).toString());
Spring MVC — 使用ModelAndView
Spring MVC控制器为了更能好松耦合,一般控制器的参数列表尽量不使用Servlet的API,避免依赖底层的Servlet。而且Spring MVC也提供了很多很好的替代支持。
使用ModelAndView是一个好方法
@RequestMapping(value = "/register", method = RequestMethod.POST)
public ModelAndView register(User user) {
Object obj1 = ....;
ModelAndView mv = new ModelAndView();
// mv.addObject("test");
// mv.addObject(obj1);
// 参数列表是POJO(user)自动添加了user进了-ModelAndView
mv.setView(new MappingJackson2JsonView());
return mv;
}
这个控制器是直接返回JSON的, mv.addObject(obj)是要转化为JSON显示的POJO对象。
注意:如果控制器的参数列表是一个POJO, 这个对象会自动加入mv对象的
需要导入Jackson依赖,三个jar包 (jackson-annotation, jackson-core, jackson-databind)
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.7</version>
</dependency>
Spring MVC — 使用@RequestBody, @ResponseBody
这种方法是Spring MVC框架推荐的,顾名思义@RequestBody作用于HTTP请求的JSON参数列表,@ResponseBody作用于HTTP应答的JSON返回值。
@RequestMapping(value = "/updateUserinfo", method = RequestMethod.POST)
@ResponseBody
public String updateUserinfo(@RequestBody User user) {
return "test";
}
- 使用@ResponseBody注解的控制器,其返回值会转化成JSON格式, 如这里的String,会变为 {“test”}, 一般返回对象。
- 参数列表的@RequestBody会将客户端发送的JSON格式的请求映射成POJO对象(前提是交互数据命名得一致)
同样需要Jackson依赖,在Spring MVC的容器配置文件中配置注解驱动即可使用
<mvc:annotation-driven/>