SpringMVC基础--请求响应返回值、响应json数据,对json数据的封装和转换

    科技2022-07-17  121

    响应返回值

    在处理请求时,控制器的处理函数返回值类型可以决定其怎么响应该请求。

    返回值为String类型

    当返回值为string类型,会根据返回值,到视图解析器指定的路径寻找指定类型的文件显示出来。

    控制器处理方法

    @RequestMapping("/hello") public String testJson() { System.out.println("执行了"); return "success"; }

    视图解析器配置

    <!-- 配置视图解析器 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/pages/"></property> <property name="suffix" value=".jsp"></property> </bean>

    处理/hello请求时就会向视图解析器指定的路径,classpath/WEB-INT/pages/去找到success.jsp文件然后显示到浏览器。

    返回值为void

    如果返回值void,并且控制器处理请求方法不做任何转发和重定向,则默认会向视图解析器指定的路径寻找请求名称.类型名文件。

    @RequestMapping("/hello") public void testJson() { System.out.println("执行了"); }

    如上,就会去找hello.jsp文件,找不到会直接报404。 一般返回值为void类型时,都会在控制器处理方法中做转发和重定向。 下述代码包含三种方法

    @RequestMapping("/testVoid") public void testVoid(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException { System.out.println("执行了"); // 第一种:编写请求转发程序 // httpServletRequest.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(httpServletRequest,httpServletResponse); // 第二种:重定向 // httpServletResponse.sendRedirect(httpServletRequest.getContextPath()+"/index.jsp"); //设置中文乱码问题 httpServletResponse.setCharacterEncoding("UTF-8"); httpServletResponse.setContentType("text/html;charset=UTF-8"); // 第三种:直接会响应。直接打印出以下字符 httpServletResponse.getWriter().println("你好"); }

    对HttpServletRequest和HttpServletResponse不了解的,可以看下这篇博客:HttpServletRequest与HttpServletResponse的实现类

    返回值为ModelAndView

    通过创建ModelAndView对象对数据进行封装,让后跳转到视图解析系指定路径的指定类型文件,以String为返回值类型的底层就是以ModelAndView来实现的。

    @RequestMapping("/testModelAndView") public ModelAndView testModelAndView() { System.out.println("执行了"); User user = new User(); user.setName("美美"); user.setPassword("123"); user.setAge(18); ModelAndView mv = new ModelAndView(); mv.addObject("user",user); mv.setViewName("success"); return mv; }

    响应JSON数据

    在jsp主页面发送json数据给服务器,控制器处理方法通过@RequestBody来将json数据封装成JavaBean类型,最后通过@ResponseBody将JavaBean类型再转换成json数据。 Springmvc 默认用 MappingJacksonHttpMessageConverter 对 json 数据进行转换,需要加入 jackson 的包。

    <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.11.2</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.11.2</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.11.2</version> </dependency>

    首先导入jquery.js文件放在类路径下js文件夹中 注意:我们在创建前端控制器的时候是拦截所有请求,包括这些静态文件。

    <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>

    所以我们需要在springmvc的配置文件中设置过滤掉这些静态文件。

    <!-- 设置静态资源不过滤 --> <mvc:resources location="/js/" mapping="/js/**"/> <mvc:resources location="/img/" mapping="/img/**"/> <mvc:resources location="/css/" mapping="/css/**"/>

    发送json数据

    <button id="btn">按钮</button> <script> $(function () { $("#btn").click(function () { $.ajax({ url:"request/testJson", contentType:"application/json;charset=UTF-8", data:'{"name":"aa","password":100}', dataType:"json", type:"post", success:function(data){ alert(data); alert(data.name); } }); }) }) </script>

    控制器处理方法

    // ResponseBody 将JavaBean对象转换成JSON数据 @RequestMapping("/testJson") public @ResponseBody User testJson(@RequestBody User user) { System.out.println("执行了"); System.out.println("user:" + user); return user; }

    成功封装成JavaBean类型

    成功转换为json数据

    Processed: 0.010, SQL: 8