SpringMVC之@ResponseBody注解

前言

本章我们学习到SpringMVC的服务器端如何提供数据查询服务,这里需要使用两个重要的注解:@ResponseBody和@RestController。

@ResponseBody注解

在前面使用SpringMVC时,Controller中的方法返回值会通过视图处理器ViewResolver处理为页面的URL,然后跳转到对应页面中,如下面例子返回的hello,将转换为/WEB-INF/pages/hello.jsp

@Controller

public class UserController{

@RequestMapping(“/login”)

public String login(){

return “hello”;

}

}

有时候我们需要用Controller实现网络服务接口,比如:商品查询、查询天气、新闻数据等。就不需要进行页面跳转而是直接返回数据。

这时候我们可以在方法上,添加注解:@ResponseBody

@Controller

public class UserController{

@ResponseBody

@RequestMapping(“/login”)

public String login(){

return “hello”;

}

}

在浏览器中直接显示hello文字,也就是说添加了@ResponseBody注解的方法,返回值会通过HTTP响应主体直接发送给浏览器。

类型转换器

默认情况下,使用@ResponseBody返回的数据只能是String类型,其它类型返回时会出现异常:

这里提示没有对应的转换器,这里可以添加转换器将数据转换为特定的格式,如:xml或json等,JSON是数据通信的主要格式,我们将添加一个JSON格式的转换器。配置方法非常简单,我们只需要添加jackson-databind依赖:

<dependency>

<groupId>com.fasterxml.jackson.core</groupId>

<artifactId>jackson-databind</artifactId>

<version>2.8.7</version>

</dependency>

Jackson库可以实现Java对象和JSON的相互转换,引入Jackson-databind依赖后,SpringMVC会自动添加Jackson的转换器。

转换自定义类型

接下来我们再进行测试,添加方法测试返回boolean数据

@ResponseBody

@RequestMapping("/login2")

public boolean login2(){

return false;

}

我们进行数据查询时,需要返回自定义类型的数据,如:用户、商品、订单、文章等,这里我们测试返回自定义类型:

public class User {

private int id;

private String username;

private String birthday;

private String sex;

private String address;

//添加get\set\构造方法

...

}

@ResponseBody

@RequestMapping("/login3")

public User login3(){

User user = new User(1, "张三", "1990-2-1", "男", "武汉");

return user;

}

可以看到User对象被转换成了JSON格式。再测试对象集合:

@ResponseBody

@RequestMapping("/login4")

public List<User> login4(){

List<User> users = new ArrayList<>();

users.add(new User(1, "张三", "1990-2-1", "男", "武汉"));

users.add(new User(2, "李四", "1990-2-1", "男", "武汉"));

users.add(new User(3, "王五", "1990-2-1", "男", "武汉"));

return users;

}

List集合被转换成了JSON数组,我们从数据库查询到数据后都会放入对应的实体类集合中,然后把集合转换成JSON格式发送给客户端,有了@ResponseBody和Jackson转换器可以很容易的实现。

@RestController注解

如果一个Controller类主要用于做网络服务,所有的方法都需要添加@ResponseBody注解,我们可以在类的前面加上@RestController注解,这个注解相当于@Controller+@ResponseBody,也就是说它既可以用于声明类为Controller,也可以给所有方法自动添加@ResponseBody注解。

总结

本章我们学习了SpringMVC中的@ResponseBody注解,有该注解的方法,可以将数据直接返回给客户端,我们还学习了利用Jackson库提供的转换器,将自定义类型转换为JSON格式,实际项目中有很多地方需要它们来提供查询数据的服务。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,172评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,346评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,788评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,299评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,409评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,467评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,476评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,262评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,699评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,994评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,167评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,827评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,499评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,149评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,387评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,028评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,055评论 2 352

推荐阅读更多精彩内容

  • Spring的模型-视图-控制器(MVC)框架是围绕一个DispatcherServlet来设计的,这个Servl...
    alexpdh阅读 2,643评论 0 3
  • 对于java中的思考的方向,1必须要看前端的页面,对于前端的页面基本的逻辑,如果能理解最好,不理解也要知道几点。 ...
    神尤鲁道夫阅读 810评论 0 0
  • 秋风萧瑟天气凉,云淡空阔似苍茫。 梧桐叶落小忧伤,石榴笑挂枝头上。 白须老者抬头望,不知可否谈心殇。 那时岁月旧时...
    孤舟墨雨阅读 219评论 0 4
  • 如果说我一定是没有任何办法了,那么现在一定是这样的。 如果说一个人确实可以胆大妄为,我想我在这里也算这样了。本着初...
    谜园阅读 239评论 0 2
  • 安顿下来 便回复你 谁叫舟车劳顿会那么困呢 谁没个 三层两层房子 可航舶9平米的小出租屋的日子终究是始料未及的 并...
    江城诗苑阅读 252评论 0 3