前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Web MVC 响应消息

Spring Web MVC 响应消息

作者头像
Demo_Null
发布2020-09-28 12:09:00
7600
发布2020-09-28 12:09:00
举报
文章被收录于专栏:Java 学习Java 学习

1.1 响应内容

在这里插入图片描述
在这里插入图片描述

1.2 跳转页面

1.2.1 返回字符串

☞ 添加视图解析器(spring-mvc.xml)
代码语言:javascript
复制
<!-- 视图解析器 -->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	<!-- 前缀 -->
    <property name="prefix" value="/WEB-INF/views/"/>
    <!-- 后缀 -->
    <property name="suffix" value=".jsp"/>
</bean>
☞ 请求方法
代码语言:javascript
复制
/**
 * Created with IntelliJ IDEA.
 *
 * @author Demo_Null
 * @date 2020/8/27
 * @description 控制器
 */
@Controller
@RequestMapping("/demo")
public class DemoController {

    @GetMapping("/get")
    public String get() {
        return "success";
    }
}
在这里插入图片描述
在这里插入图片描述
☞ 说明

  视图解析器会自动给我们请求方法中返回的字符串加上前缀和后缀组成完整的转发地址,直接返回资源名称 success 的等同于返回 forward:/WEB-INF/views/success.jsp 即请求转发,如果想要重定向需要返回 redirect:/index.jsp,加了前缀之后不会经过视图解析器。注意,外部是无法直接访问 WEB-INF 下的页面,只有通过服务器转发才可以,所以重定向不要指到 WEB-INF 下。

在这里插入图片描述
在这里插入图片描述

  另外,如果转发的页面是 HTML,并且 DispatcherServlet 拦截配置为 / ,为了实现 REST 风格,拦截了所有的请求,*.js*.html 等静态文件的访问也就被拦截了,需要放行静态资源。

1.2.2 返回 ModelAndView

☞ 概述

  使用 ModelAndView 类用来存储处理完后的结果数据,以及显示该数据的视图。顾名思义 ModelAndView 中的 Model 代表模型,View 代表视图。业务处理器调用模型层处理完用户请求后,把结果数据存储在该类的 model 中,把要返回的视图信息存储在 view 中,然后将 ModelAndView 返回。框架通过调用配置文件中定义的视图解析器,对该对象进行解析,最终把数据显示在指定的页面上。

☞ 请求方法
代码语言:javascript
复制
/**
 * Created with IntelliJ IDEA.
 *
 * @author Demo_Null
 * @date 2020/8/27
 * @description 控制器
 */
@Controller
@RequestMapping("/demo")
public class DemoController {

    @GetMapping("/get")
    public ModelAndView get() {
    	// 也可以在方法形参上直接声明 ModelAndView, 无需自己创建
        ModelAndView modelAndView = new ModelAndView();
        // 设置数据
        modelAndView.addObject("name", "张三");
        // 设置视图名称
        modelAndView.setViewName("success");
        return modelAndView;
    }
}
☞ JSP
代码语言:javascript
复制
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false"%>
<html>
<head>
    <title>success</title>
</head>
<body>
	${name}
</body>
</html>
在这里插入图片描述
在这里插入图片描述

1.2.3 返回为空

  当请求方法返回为空时,MVC 会自动将请求资源路径 demo/success 拼接上前缀和后缀做为请求转发的地址。

代码语言:javascript
复制
/**
 * Created with IntelliJ IDEA.
 *
 * @author Demo_Null
 * @date 2020/8/27
 * @description 返回 void
 */
@Controller
@RequestMapping("/demo")
public class DemoController {

    @GetMapping("/success")
    public void get() {
        System.out.println("我来了");
    }
}
在这里插入图片描述
在这里插入图片描述

1.3 响应数据

1.3.1 直接返回字符串

代码语言:javascript
复制
/**
 * Created with IntelliJ IDEA.
 *
 * @author Demo_Null
 * @date 2020/8/27
 * @description 返回 String
 */
@Controller
@RequestMapping("/demo")
public class DemoController {

    @GetMapping("/get")
    @ResponseBody
    public String get() {
        return "Hello";
    }
}
在这里插入图片描述
在这里插入图片描述

1.3.2 返回 JSON 字符串

代码语言:javascript
复制
/**
 * Created with IntelliJ IDEA.
 *
 * @author Demo_Null
 * @date 2020/8/27
 * @description 返回 JSON
 */
@Controller
@RequestMapping("/demo")
public class DemoController {

    @GetMapping("/get")
    @ResponseBody
    public String get() {

        Map<String, String> map = new HashMap<>();
        map.put("name", "jack");
        map.put("age", "20");

        String json = JSONObject.toJSONString(map);
        return json;
    }
}
在这里插入图片描述
在这里插入图片描述

1.3.2 返回对象

代码语言:javascript
复制
/**
 * Created with IntelliJ IDEA.
 *
 * @author Demo_Null
 * @date 2020/8/27
 * @description 返回对象
 */
@Controller
@RequestMapping("/demo")
public class DemoController {

    @GetMapping("/get")
    @ResponseBody
    public Student get() {

        Student student = new Student();
        student.setName("Tom");
        student.setAge(23);

        return student;
    }
}
在这里插入图片描述
在这里插入图片描述

  这里直接报错了,这个错误的原因是 Spring Web MVC 会帮我们将对象转为 JSON 然后返回,而 Spring Web MVC 底层默认使用的 jackjson,我们并没有引入 jackjson 所以就报错了,引入之后就 OK 了。

代码语言:javascript
复制
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.5</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.9.5</version>
</dependency>
在这里插入图片描述
在这里插入图片描述

1.3.3 @RestController

代码语言:javascript
复制
/**
 * Created with IntelliJ IDEA.
 *
 * @author Demo_Null
 * @date 2020/8/27
 * @description @RestController 注解
 */
@RestController		// @RestController 这个注解其实就是 @ResponseBody 和 @Controller 注解的组合
@RequestMapping("/demo")
public class DemoController {

    @GetMapping("/get")
    public String get() {

        return "10086";
    }
}

1.3.4 返回中文乱码

  在 Spring Web MVC 中 StringHttpMessageConverter 这个转换器,父类AbstractHttpMessageConverter 的 supportedMediaTypes 属性默认是 iso-8895-1 导致中文乱码。有两种解决方案,第一个是在配置文件中指定转换器使用的字符集,第二个是在 @RequestMapping 中指定 produces 属性。

代码语言:javascript
复制
<mvc:annotation-driven>
	<mvc:message-converters>
		<bean class="org.springframework.http.converter.StringHttpMessageConverter">
			<property name="supportedMediaTypes" value="text/html;charset=utf-8"></property>
		</bean>
	</mvc:message-converters>
</mvc:annotation-driven>
代码语言:javascript
复制
@ResponseBody
@GetMapping(value = "/get", produces = "application/json;charset=utf-8")
public String get() {}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-08-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.1 响应内容
  • 1.2 跳转页面
    • 1.2.1 返回字符串
      • ☞ 添加视图解析器(spring-mvc.xml)
      • ☞ 请求方法
      • ☞ 说明
    • 1.2.2 返回 ModelAndView
      • ☞ 概述
      • ☞ 请求方法
      • ☞ JSP
    • 1.2.3 返回为空
    • 1.3 响应数据
      • 1.3.1 直接返回字符串
        • 1.3.2 返回 JSON 字符串
          • 1.3.2 返回对象
            • 1.3.3 @RestController
              • 1.3.4 返回中文乱码
              相关产品与服务
              数据保险箱
              数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档