eg:
@Controller
public class HSRIndexGeoAction extends HSRQueryBaseAction {
private static final LogUtil LOG = LogUtil
.getLogger(HSRIndexGeoAction.class);
@RequestMapping(value = "/HighSpeedRail/GIS/IndexGeo")
@ResponseBody
public void business(HttpServletRequest request,
HttpServletResponse response) {
LOG.info("#HSRAssurance#HSRIndexGeoAction#business#Begin");
commonBusiness(request, response, IHSRGeoQueryService.class);
LOG.info("#HSRAssurance#HSRIndexGeoAction#business#end");
}
}
注解:
@Controller
@Controller 用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象
分发处理器将会扫描使用了该注解的类的方法,并检测该方法是否使用了@RequestMapping 注解。@Controller 只是定义了一个控制器类,而使用@RequestMapping 注解的方法才是真正处理请求的处理器
@RequestMapping(value = "/HighSpeedRail/GIS/IndexGeo")
可以使用@RequestMapping 来映射URL 到控制器类,或者是到Controller 控制器的处理方法上。当@RequestMapping 标记在Controller 类上的时候,里面使用@RequestMapping 标记的方法的请求地址都是相对于类上的@RequestMapping 而言的;当Controller 类上没有标记@RequestMapping 注解时,方法上的@RequestMapping 都是绝对路径。这种绝对路径和相对路径所组合成的最终路径都是相对于根路径“/ ”而言的。
@ResponseBody
Spring 3.X系列增加了新注解@ResponseBody,@RequestBody
@RequestBody 将HTTP请求正文转换为适合的HttpMessageConverter对象。
@ResponseBody 将内容或对象作为 HTTP 响应正文返回,并调用适合HttpMessageConverter的Adapter转换对象,写入输出流。
HttpMessageConverter接口,需要开启<mvc:annotation-driven />。
AnnotationMethodHandlerAdapter将会初始化7个转换器,可以通过调用AnnotationMethodHandlerAdapter的getMessageConverts()方法来获取转换器的一个集合 List<HttpMessageConverter>
引用
ByteArrayHttpMessageConverter
StringHttpMessageConverter
ResourceHttpMessageConverter
SourceHttpMessageConverter
XmlAwareFormHttpMessageConverter
Jaxb2RootElementHttpMessageConverter
MappingJacksonHttpMessageConverter
可以理解为,只要有对应协议的解析器,你就可以通过几行配置,几个注解完成协议——对象的转换工作!
PS:Spring默认的json协议解析由Jackson完成。
2017年7月15日续:
一、springmvc常用注解之@Controller和@RequestMapping:
对于各种注解而言,排第一的当然是“@Controller”,表明某类是一个controller。
“@RequestMapping”请求路径映射,如果标注在某个controller的类级别上,则表明访问此类路径下的方法都要加上其配置的路径;最常用是标注在方法上,表明哪个具体的方法来接受处理某次请求。
参考:https://my.oschina.net/zhdkn/blog/316530
二、Spring注解@Component、@Repository、@Service、@Controller区别
今天把以前做的一个项目翻出来看一下发现用·@Component标记一个组件,而网上有的用@Service标记组件,我晕就查了一下资料:
spring 2.5 中除了提供 @Component 注释外,还定义了几个拥有特殊语义的注释,它们分别是:@Repository、@Service 和 @Controller。
在目前的 Spring 版本中,这 3 个注释和 @Component 是等效的,但是从注释类的命名上,很容易看出这 3 个注释分别和持久层、业务层和控制层(Web 层)相对应。
虽然目前这3 个注释和 @Component 相比没有什么新意,但 Spring 将在以后的版本中为它们添加特殊的功能。
所以,如果 Web 应用程序采用了经典的三层分层结构的话,最好在持久层、业务层和控制层分别采用上述注解对分层中的类进行注释。
@Service用于标注业务层组件
@Controller用于标注控制层组件(如struts中的action)
@Repository用于标注数据访问组件,即DAO组件
@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
1. @Service
2. public class VentorServiceImpl implements iVentorService {
3. }
4. @Repository
5. public class VentorDaoImpl implements iVentorDao {
6. }
一些参考文档:
http://www.imooc.com/article/1392
http://elim.iteye.com/blog/1753271
http://blog.csdn.net/chunqiuwei/article/details/16115135
http://snowolf.iteye.com/blog/1628861
http://www.cnblogs.com/chenssy/archive/2013/03/17/2964593.html
https://my.oschina.net/HeliosFly/blog/205343
http://elim.iteye.com/blog/1750680
http://www.cnblogs.com/hustyangli/archive/2008/09/01/1281319.html
http://www.cnblogs.com/fangqi/archive/2012/10/28/2743108.html