`

SpringMVC (二)基于注解方式的Controller

阅读更多

SpringMVC在实际的开发应用过程中,通常采用注解的方式。

第一步,告知Spring,Controller放在哪个路径下,让Spring容器自动去寻找和装配Controller。

<context:component-scan base-package="org.lian.controller"/>

 第二步,SpringMVC中HandlerMapping和HandlerAdapter是成对出现,接下来就是配置这两个对象。

<!-- 采用注解的方式    HandlerMapping 和  HandlerAdapter-->
	<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
	<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
		<property name="messageConverters">
	        <util:list id="beanList">
	        	<ref bean="stringHttpMessageConverter"/>
	            <ref bean="gsonHttpMessageConverter"/>
	        </util:list>
	    </property>
	</bean>
	<bean id="stringHttpMessageConverter"
        class="org.springframework.http.converter.StringHttpMessageConverter">
        <property name="supportedMediaTypes">
			<list>
				<value>text/html;charset=UTF-8</value>
				<value>application/json;charset=UTF-8</value>
			</list>
       </property>
        
    </bean>
        
	<!-- 通过Gson来进行Json数据格式转化 配置转化器 -->
	<bean id="gsonHttpMessageConverter"
        class="org.springframework.http.converter.json.GsonHttpMessageConverter">
        <property name="supportedMediaTypes">
			<list>
				<value>text/html;charset=UTF-8</value>
				<value>application/json;charset=UTF-8</value>
			</list>
       </property>
    </bean>

 对于不同格式数据要配置不同的Converter数据转化器,上面的配置中要处理JSON格式的数据,配置了JSON转化器,使用Gson来处理json数据,配置相应的转化器类。

第三步 路径映射和返回数据

@RequestMapping("city")
@Controller
public class CityController {

	private CityService cityService;

	public CityService getCityService() {
		return cityService;
	}

	@Autowired
	public void setCityService(CityService cityService) {
		this.cityService = cityService;
	}

	/**
	 * 
	 * @description TODO
	 * @return
	 * @return ModelAndView
	 */
	@RequestMapping(path = "/view/list", method = RequestMethod.GET)
	public ModelAndView listProvincePage() {
		ModelAndView mv = new ModelAndView();
		mv.setViewName("division/cityList");
		return mv;
	}

	@RequestMapping(path = "/handler/list", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
	@ResponseBody
	public String listCity(@RequestBody Map<String, String> request) {

		/**
		 * 方法中参数 如果使用 Map<String,Object>类型, 那么SpringMVC绑定参数在这里会将数值解析为float类型
		 * 
		 * 如limit 10 会解析成 10.0
		 * 
		 */
		int limit = Integer.parseInt(request.get(BootstrapTableContants.LIMIT));
		int offset = Integer.parseInt(request.get(BootstrapTableContants.OFFSET));
		return cityService.pageCity(null, offset, limit);
	}

	@RequestMapping(path = "/handler/listProvince", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
	@ResponseBody
	public String listProvince() {
		return cityService.listProvince();
	}

	@RequestMapping(path = "/handler/add", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
	@ResponseBody
	public String addCity(@RequestBody City city) {
		return cityService.addCity(city);
	}

	@RequestMapping(path = "/handler/edit", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
	@ResponseBody
	public String editCity(@RequestBody City city) {
		return cityService.editCity(city);
	}

	@RequestMapping(path = "/handler/delete", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
	@ResponseBody
	public String deleteCity(@RequestBody City city) {
		return cityService.deleteCityById(city.getCityId());
	}

	
}

 在返回ModelAndView是返回视图层更具体的是指JSP页面,如果要返回JSON格式数据,可以通过Gson在程序里将手动转化,也可直接将对象返回,因为在前面已经配置了转化器,SpringMVC会通过合适自动给转化。需要特别指出在返回JSON数据时要使用@ResponseBody。

    SpringMVC允许访问静态资源,脚本图片CSS等,需要添加下面的配置

<!-- 开启静态资源缓存  -->
	<mvc:resources mapping="/resources/**" location="/resources/">
    	<mvc:cache-control max-age="3600" cache-public="true"/>
	</mvc:resources>
	
	<!-- <mvc:resources mapping="/resources/**" location="/resources/">
	</mvc:resources> -->

 最后完整的SpringMVC配置如下,特别指出需要处理特殊数据,需要配置其他的转化器,这里没有全部罗列,并且也没有提到SpringMVC上传文件需要的转化器等。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:util="http://www.springframework.org/schema/util"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/util
        http://www.springframework.org/schema/util/spring-util.xsd">

    <context:component-scan base-package="org.lian.controller"/>
	
	<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
	    <property name="prefix" value="/WEB-INF/jsp/"/>
	    <property name="suffix" value=".jsp"/>
	</bean>
	<!-- 根据 Bean的name来映射路径-->
	<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
	<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
	
	<!-- <bean class="org.springframework.web.servlet.handler.SimpleServletHandlerAdapter"/> -->
	<!-- 根路径/ 不可省略 否则找不到对象 -->
	<bean name="/helloWorld" class="org.lian.controller.HelloWorldController"/>
	<!-- 采用注解的方式    HandlerMapping 和  HandlerAdapter-->
	<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
	<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
		<property name="messageConverters">
	        <util:list id="beanList">
	        	<ref bean="stringHttpMessageConverter"/>
	            <ref bean="gsonHttpMessageConverter"/>
	        </util:list>
	    </property>
	</bean>
	<bean id="stringHttpMessageConverter"
        class="org.springframework.http.converter.StringHttpMessageConverter">
        <property name="supportedMediaTypes">
			<list>
				<value>text/html;charset=UTF-8</value>
				<value>application/json;charset=UTF-8</value>
			</list>
       </property>
        
    </bean>
        
	<!-- 通过Gson来进行Json数据格式转化 配置转化器 -->
	<bean id="gsonHttpMessageConverter"
        class="org.springframework.http.converter.json.GsonHttpMessageConverter">
        <property name="supportedMediaTypes">
			<list>
				<value>text/html;charset=UTF-8</value>
				<value>application/json;charset=UTF-8</value>
			</list>
       </property>
    </bean>
        
	<!-- 开启静态资源缓存  -->
	<mvc:resources mapping="/resources/**" location="/resources/">
    	<mvc:cache-control max-age="3600" cache-public="true"/>
	</mvc:resources>
	
	<!-- <mvc:resources mapping="/resources/**" location="/resources/">
	</mvc:resources> -->
</beans>

 

分享到:
评论

相关推荐

    Redis 与SpringMVC 基于注解方式 集成

    现在,我们可以在SpringMVC的Controller中使用注解实现Redis缓存。例如,使用`@Cacheable`注解将方法结果缓存到Redis: ```java @RestController @RequestMapping("/api") public class UserController { @...

    springMVC学习——注解方式

    在实际项目中,还会涉及到更多高级特性,如拦截器、异常处理、视图解析等,这些都是SpringMVC注解方式的延伸应用。在"AnnotationTest"文件中,可能包含了实践这些概念的示例代码,进一步加深了对SpringMVC注解方式的...

    SpringMVC基于注解的Controller详解

    SpringMVC基于注解的Controller详解旨在介绍如何利用注解简化Spring MVC的配置,提高开发效率。自Spring 2.5版本开始,Spring MVC引入了注解驱动的功能,使得开发者无需编写大量的XML配置,就能轻松地创建和管理...

    基于注解的springMVC简单的例子

    然而,随着Java注解的广泛应用,SpringMVC也开始支持基于注解的开发方式,大大简化了配置过程,提高了开发效率。 **注解驱动的Controller** 在基于注解的SpringMVC中,我们可以使用`@Controller`注解来标记一个类...

    基于注解实现springmvc的范例

    二、注解驱动的Spring MVC 1. @Controller:标记在类上,表示该类是一个处理HTTP请求的控制器。例如: ```java @Controller public class MyController { //... } ``` 2. @RequestMapping:用于映射HTTP请求到控制...

    SpringMvc+Spring+Mybatis+Maven+注解方式=整合

    "SpringMvc+Spring+Mybatis+Maven+注解方式"是一个经典的Java后端技术栈,它整合了四个关键组件,为开发人员提供了强大的工具和框架支持。下面将详细讲解这四个组件及其整合方式。 1. **Spring Framework**: ...

    基于注解SpringMVC框架

    它采用基于注解的方式,极大地简化了开发者的工作,使得配置文件大大减少,提高了开发效率。本篇文章将围绕SpringMVC的核心概念、注解使用以及其在实际项目中的应用进行详细讲解。 1. **核心组件** - `...

    springmvc常用注解标签详解

    @Controller 是 SpringMVC 中最基本的注解之一,该注解用于标记一个类是 Controller,控制器 Controller 负责处理由 DispatcherServlet 分发的请求。使用@Controller 标记的类可以处理用户请求,并将请求数据经过...

    springmvc非注解controller控制器

    尽管如此,了解非注解Controller的实现原理对于理解Spring MVC的工作机制仍然是有帮助的。 首先,我们来看一下非注解Controller的基本结构。在不使用注解的情况下,我们需要创建一个实现了`Controller`接口的类,该...

    SpringMVC纯注解配置

    1. **@Controller**:这个注解用于标记一个类作为SpringMVC的控制器。控制器类将处理HTTP请求,并调用业务逻辑方法。 2. **@RequestMapping**:此注解用于映射HTTP请求到特定的方法。可以放在类级别或方法级别,...

    SpringMVC九大常用注解

    ### SpringMVC九大常用注解详解 #### 一、@Controller **定义**: `@Controller` 注解是用来标记一个类作为控制器(Controller)组件,在Spring MVC框架中扮演着请求处理者的角色。 **作用**: 通过这个注解,可以将...

    非注解Springmvc+spring+hibernate 入门实例

    在非注解方式下,我们通常会通过XML配置文件来定义控制器(Controller)、视图解析器(View Resolver)以及模型-视图-适配器(M-V-A)组件。控制器接收HTTP请求,调用业务逻辑,然后将结果传递给视图进行展示。在...

    spring+mybatis+springmvc 全注解框架

    【标题】"spring+mybatis+springmvc 全注解框架"揭示了这是一个基于Java的Web开发框架,其中集成了Spring、MyBatis和SpringMVC这三个关键组件。Spring是全面的企业级应用框架,提供了依赖注入(DI)和面向切面编程...

    springmvc和mybatis框架整合(注解和非注解)

    在SpringMVC的Controller中,我们可以使用`@Autowired`注解来注入Service层的对象。Service层通常封装了业务逻辑,它调用Mapper接口执行数据库操作。例如,一个简单的查询操作可能如下所示: ```java @Service ...

    springmvc+mybatis+mysql(采用注解方式)

    总结,"springmvc+mybatis+mysql(采用注解方式)"的组合是现代Web开发的主流选择,它利用注解简化了配置,提高了开发效率,同时保持了强大的功能和良好的性能。在实际项目中,这种技术栈可以实现高效的CRUD操作,支持...

    一套基于SpringMVC+velocity框架的web应用 ,基于注解

    基于注解的SpringMVC允许开发者在控制器类的方法上直接使用注解,如@RequestMapping,@RequestParam等,极大地简化了配置,提高了开发效率。通过@Controller和@RequestMapping注解,可以轻松定义控制器及其处理的...

    SpringMVC 注解和非注解demo

    ### 二、非注解方式 在Spring MVC早期版本中,更多的配置是通过XML完成的。以下是一些非注解方式的核心概念: 1. `&lt;bean&gt;`标签:在`spring-mvc.xml`配置文件中定义控制器Bean,如`...

    springmvc+jdbctemplate+mysql(采用注解方式)

    总的来说,"springmvc+jdbctemplate+mysql(采用注解方式)"的组合为开发中小型项目提供了高效、灵活的基础。通过注解方式,开发者可以快速搭建系统,专注于业务逻辑,而无需过多关注底层配置。这个技术栈的使用能够...

    SpringMVC+MyBatis+MySql注解示例

    SpringMVC通过注解可以极大地简化配置,如`@Controller`、`@RequestMapping`等,使得控制器类的编写更加直观。 ### MyBatis MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免...

Global site tag (gtag.js) - Google Analytics