Spring Boot - fish
1. @RestController
combines @Controller
and @ResponseBody, 这是不是意味着不用再import jakson的包(@ResponseBody时用到的,将对象转成json对象)了? 有待考证。
2. Create an Application class
package hello; import java.util.Arrays; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext; @SpringBootApplication
public class Application { public static void main(String[] args) {
ApplicationContext ctx = SpringApplication.run(Application.class, args); System.out.println("Let's inspect the beans provided by Spring Boot:"); String[] beanNames = ctx.getBeanDefinitionNames();
Arrays.sort(beanNames);
for (String beanName : beanNames) {
System.out.println(beanName);
}
} }
以上代码,调用annotation @SpringBootApplication,它会加载@Configuration,@EnableAutoConfiguation,@ComponentScan
其中,@Configuration:标记该class是ApplicationContext的一个bean定义,相当于原来applicationContext.xml文件中的<bean>标签。
@EnableAutoConfiguation:标记Spring Boot开始加载各种beans(包括自定义的,classpath中的),以及各种属性。
@ComponentScan:告知Spring去搜索其他组件,配置或者服务。其实就是原来applicationContext.xml文件中的<mvc:component-scan>标签。
另外,由以上分析,个人认为在Spring Boot中,实际上是通过各种annotation来代替.xml配置文件中的各种配置,从而将xml文件干掉。
针对Spring MVC应用,本应该需要注解@EnableWebMvc,但是当Spring Boot在classpath中看到spring-webmvc时,就会自动加载该注解,激活DispatcherServlet等。
问题:对DispatcherServlet的配置,如何通过Spring Boot来配置呢?
--------------------------------------------------------------------------------------
通过对 Spring Boot中 Building a RESTful Web Service 这一章节的阅读,有以下理解:
首先,解决问题一:@RestController
combines @Controller
and @ResponseBody......
仍然需要import jakson的包,因为spring并没有提供将java Object转成JSON对象的package。
但spring提供MappingJackson2HttpMessageConverter,从而通过监测到jakson的包而自动加载并使用。最终将java Object转成JSON对象并附于HTTP response。
其次,如下:
package hello; import java.util.concurrent.atomic.AtomicLong;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; @RestController
public class GreetingController { private static final String template = "Hello, %s!";
private final AtomicLong counter = new AtomicLong(); @RequestMapping("/greeting")
public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) {
return new Greeting(counter.incrementAndGet(),
String.format(template, name));
}
}
终于明白@RequestMapping, @ResponseBody的用意和区别了。
可以说,@ResponseBody是为RESTful web service服务的。正如上所述,traditional mvc controller和RESTful web service controller之间的区别主要在于HTTP响应体的创建方式。
前者应用在Spring中,具体表现为在处理请求后,展示数据将存于map/modelMap/viewAndModelMap中,返回的是String/void类型(String则表示view的名称),再通过view技术对model数据进行渲染。
后者则不同,而是将展示数据存于自定义的对象中,并返回该对象,最终将该对象转成JSON对象附于HTTP响应体上。类似于MVC被VC替代了。
在Spring 4中,增加了@RestController注解,它是@Controller和@ResponseBody的结合。用于标记该类中的所有方法将返回一个自定义对象,而非视图。所以,当需要Controller既返回view又返回对象时,就不能使用@RestController了。
Spring Boot - fish的更多相关文章
- spring boot自定义properity
1.spring boot使用application.properties默认了很多配置. 但有时需要自定义配置.若在application.properties添加属性: app.name=fish ...
- 玩转spring boot——快速开始
开发环境: IED环境:Eclipse JDK版本:1.8 maven版本:3.3.9 一.创建一个spring boot的mcv web应用程序 打开Eclipse,新建Maven项目 选择quic ...
- 【微框架】之一:从零开始,轻松搞定SpringCloud微框架系列--开山篇(spring boot 小demo)
Spring顶级框架有众多,那么接下的篇幅,我将重点讲解SpringCloud微框架的实现 Spring 顶级项目,包含众多,我们重点学习一下,SpringCloud项目以及SpringBoot项目 ...
- 玩转spring boot——开篇
很久没写博客了,而这一转眼就是7年.这段时间并不是我没学习东西,而是园友们的技术提高的非常快,这反而让我不知道该写些什么.我做程序已经有十几年之久了,可以说是彻彻底底的“程序老炮”,至于技术怎么样?我 ...
- 玩转spring boot——结合redis
一.准备工作 下载redis的windows版zip包:https://github.com/MSOpenTech/redis/releases 运行redis-server.exe程序 出现黑色窗口 ...
- 玩转spring boot——AOP与表单验证
AOP在大多数的情况下的应用场景是:日志和验证.至于AOP的理论知识我就不做赘述.而AOP的通知类型有好几种,今天的例子我只选一个有代表意义的“环绕通知”来演示. 一.AOP入门 修改“pom.xml ...
- 玩转spring boot——结合JPA入门
参考官方例子:https://spring.io/guides/gs/accessing-data-jpa/ 接着上篇内容 一.小试牛刀 创建maven项目后,修改pom.xml文件 <proj ...
- 玩转spring boot——结合JPA事务
接着上篇 一.准备工作 修改pom.xml文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&q ...
- 玩转spring boot——结合AngularJs和JDBC
参考官方例子:http://spring.io/guides/gs/relational-data-access/ 一.项目准备 在建立mysql数据库后新建表“t_order” ; -- ----- ...
随机推荐
- 转: 使用virtualenv搭建独立的Python环境
转自: http://qicheng0211.blog.51cto.com/3958621/1561685 谢谢作者的辛苦付出 virtualenv可以搭建虚拟且独立的python环境,可以使每个项 ...
- Android 属性动画(Property Animation) 完全解析 (上)
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38067475 1.概述 Android提 供了几种动画类型:View Anima ...
- Android优化——UI优化(四) 使用stytle
使用style替换背景,防止Activity黑色背景闪过 1.原来的布局 <LinearLayout xmlns:android="http://schemas.android.com ...
- poj3371
Flesch Reading Ease Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2269 Accepted: 710 De ...
- 如何在.net4.0中使用.net4.5的async/await
推荐文章: http://www.cnblogs.com/hj4444/p/3857771.html http://www.cnblogs.com/dozer/archive/2012/03/06/a ...
- Oracle Update
在表的更新操作中,在很多情况下需要在表达式中引用要更新的表以外的数据.象sql server提供了update的from 子句,可以将要更新的表与其它的数据源连接起来.虽然只能对一个表进行更新,但是通 ...
- 【转】【C#】【Thread】Interlocked 轻量级锁
为什么说它是轻量级呢?因为它仅对整形数据(即int类型,long也行)进行同步. 具体使用如下表: Interlocked.Increment(ref value) 数值加一(原子性操作) Inter ...
- CAS 单点登录流程
经验:在网上学东西不要指望一篇文章就能让你明白——我在网上学CAS流程,看了五六篇博文,其中三篇是觉得作者表达能力不行,或者作者自己就没明白怎么回事就出来写东西,看到一半就跳过了,剩下两篇每篇看了两遍 ...
- js 与ios 交互的三种方法
第一种:IOS拦截url 实现跳转 参考链接:http://www.cnblogs.com/pengyingh/articles/2354381.html IOS9.0 及以上支持 第二种:IOS ...
- 未能进入中断模式,原因如下:源文件“XXXXXX”不属于正在调试的项目。
这个问题是由于项目文件位置变动导致的.提示框已经说的比较清楚了. 首先可以尝试[重新生成] ,一般可以解决这个问题了. 我遇到的情况是,设置配置时,不小心取消了生成选择. 所以打开配置管理器,把相关的 ...