SpringMVC :控制器方法返回类型

返回类型

ModelAndView

    适用于将请求转发给一个JSP页面进行渲染 , 是视图和放置在Request域中的数据的封装。

String

    请求如果仅仅是希望某些处理后做些页面跳转工作,则使用String是最方便的。String即可代表
视图解析器中的逻辑视图,或者是没有配置视图解析器的视图的完整路径。

// 已经配置视图解析器 : 前缀为  /WEB-INF/view/ ; 后缀为 ''.jsp'

// 视图解析器方式
@RequestMapping(value = "/returnTypeString.do", method = RequestMethod.GET)
public String testReturnTypeString() {
    return "returnTypeString";    // 此处是逻辑视图名称,配置逻辑视图解析器即可。
}

// 完整路径形式 : 此时不能配置视图解析器
@RequestMapping(value = "/returnTypeString.do", method = RequestMethod.GET)
public String testReturnTypeString() {
    return "/WEB-INF/view/returnTypeString.jsp";    // 此处是逻辑视图名称,配置逻辑视图解析器即可。
}

void

    在处理Ajax请求的时候可以使用void。使用HttpServletResponse向流中写入
Json字符串即可。这个的Json解析方式自行选择。但是框架提供了更好的选择 返回对象的方式, 避免每次书写转Json和 获取响应对象的输出流向其输出的操作。

Object(重点)

        Spring默认使用jackson来对Object转成json, 因此需要自己引入Jar。 同时还需要配置注解驱动,让框架创建能够处理Object返回类型的Converter

配置工作
引入jackson
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-core</artifactId>
  <version>2.11.1</version>
</dependency>

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.11.1</version>
</dependency>

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-annotations</artifactId>
  <version>2.11.1</version>
</dependency>
注解驱动

        配置注解驱动:其实现的功能完成Java到Json,xml,文本,二进制的转换。当配置到配置文件后会创建
HttpMessageConveter接口的多个实现类的对象到容器中,为了完成对象到不同响应类型的转换。框架会轮询创建出来的MessageConvert的数组当中的每个实现类,调用其canWrite方法进行检测是否能转换到需要的请求体类型。

<!-- 配置注解驱动,选后缀是MVC的那一个 -->
<mvc:annotation-driven/>
@RequestBody

    将其放置到控制器方法上,告诉框架不做跳转而是写入到响应体返回操作。具体写入什么内容,看具体的返回类型。

List

    按照Object方式配置完毕后书写如下代码,即可获得Json的数组。

@ResponseBody
@RequestMapping("/returnTypeList.do")
public List<Student> testRetunTypeList() {
    Student student1 = new Student("张三", "北京");
    Student student2 = new Student("王五", "湖北");
    List<Student> stus = new ArrayList<>();
    stus.add(student1);
    stus.add(student2);
    return stus;
}
String

        根据Object的方式配置完毕后, String表示的是个文本了就不再是视图了。主要区分的依据
是否有@RequestBodyproduces能解决返回字符串当中包含中文字符的编码问题。

        其实现的原理是调用HttpMessageConveter的实现类StringHttpMessageConveterwrite
方法将字符串按照指定的编码进行输出,这个类当中包含一个默认字符集ISO-8859-1的编码。

@ResponseBody
@RequestMapping(value = "/returnTypeObjectString.do", produces = "text/plain;charset=utf-8")
    public String testReturnTypeObjectString() {
    return "你好, this is a String";
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值