Spring MVC与前端实现JSON交互

版权声明:本文为博主原创文章,未经博主允许不得转载。 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";
}
  1. 使用@ResponseBody注解的控制器,其返回值会转化成JSON格式, 如这里的String,会变为 {“test”}, 一般返回对象。
  2. 参数列表的@RequestBody会将客户端发送的JSON格式的请求映射成POJO对象(前提是交互数据命名得一致)

同样需要Jackson依赖,在Spring MVC的容器配置文件中配置注解驱动即可使用

<mvc:annotation-driven/>

猜你喜欢

转载自blog.csdn.net/chenbetter1996/article/details/83832525
今日推荐