@File
2019-12-09T01:25:52.000000Z
字数 9774
阅读 250
java
<!-- spring-mvc集成包 --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.1.9.RELEASE</version></dependency><!-- fastjson包 --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.58</version></dependency><!-- 跨域请求 --><dependency><groupId>com.thetransactioncompany</groupId><artifactId>cors-filter</artifactId><version>1.3.2</version></dependency>
<?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:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"><!--开启springmvc 的注解--><context:component-scan base-package="com.lidaye.ssm"/><!-- 设置配置方案 --><mvc:annotation-driven><!-- 消息转化器 --><mvc:message-converters register-defaults="false"><bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"><!-- 加入支持的媒体类型:返回contentType --><property name="supportedMediaTypes"><list><!-- 这里顺序不能反,一定先写text/html,不然IE下会出现下载提示 --><value>text/html;charset=UTF-8</value><value>application/json;charset=UTF-8</value></list></property><property name="fastJsonConfig"><bean class="com.alibaba.fastjson.support.config.FastJsonConfig"><property name="features"><list><value>AllowArbitraryCommas</value><value>AllowUnQuotedFieldNames</value><value>DisableCircularReferenceDetect</value></list></property><!--配置特定的日期格式--><property name="dateFormat" value="yyyy-MM-dd HH:mm:ss"/></bean></property></bean></mvc:message-converters></mvc:annotation-driven></beans>
<bean id="mappingJacksonHttpMessageConverter"class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"><property name="supportedMediaTypes"><list><value>text/html;charset=UTF-8</value></list></property></bean>
<mvc:default-servlet-handler/>
<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaeehttp://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"version="3.1"metadata-complete="true"><display-name>Archetype Created Web Application</display-name><!-- 网上解释:自动装配ApplicationContext.xml的配置信息(暂时不理解) --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- 加载spring 相关配置文件--><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-*</param-value></context-param><!-- 配置 DispatcherServlet --><servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 配置初始参数 --><init-param><param-name>contextConfigLocation</param-name><!-- 绑定配置文件 --><param-value>classpath:spring-mvc.xml</param-value></init-param><!-- 启动顺序 值越小优先级越高 --><load-on-startup>1</load-on-startup></servlet><!-- 配置映射 --><servlet-mapping><servlet-name>dispatcherServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping><!-- 编码过滤 --><filter><filter-name>encoding</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><!-- 编码 --><init-param><param-name>encoding</param-name><param-value>utf-8</param-value></init-param><!-- 请求 --><init-param><param-name>forceRequestEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>encoding</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- 配置首页 --><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list></web-app>
<filter><filter-name>CORS</filter-name><filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class><init-param><param-name>cors.allowOrigin</param-name><param-value>*</param-value></init-param><init-param><param-name>cors.supportedMethods</param-name><param-value>GET, POST, HEAD, PUT, DELETE</param-value></init-param><init-param><param-name>cors.supportedHeaders</param-name><param-value>Accept, Origin, X-Requested-With, Content-Type, Last-Modified</param-value></init-param><init-param><param-name>cors.exposedHeaders</param-name><param-value>Set-Cookie</param-value></init-param><init-param><param-name>cors.supportsCredentials</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>CORS</filter-name><url-pattern>/*</url-pattern></filter-mapping>
@RestController 注册数据接口类
// 方法一@RestControllerpublic class HelloController{}// 方法二@Controller@ResponseBodypublic class HelloController{}
@RequestMapping 限制请求信息name: 指定映射器名称
value: 指定映射地址
method: 请求类型
params: 请求参数
headers: 头部参数
consumes: 接收的内容格式:Content-type
produces: 响应的内容格式:Content-type
@RestControllerpublic class HelloController {// 定义请求信息@RequestMapping("/lidaye")public String lidaye(){return "hello";}}
@GetMapping get 请求(简化@RequestMapping)@PostMapping post 请求(简化@RequestMapping)@PutMapping put 请求(简化@RequestMapping)@DeleteMapping delete请求(简化@RequestMapping)@ModelAttribute 所有请求接收前执行的方法value: 定义一个参数,值为返回值
binding: 数据绑定,默认true
// 定义一个预执行方法,并声明一个name参数@ModelAttribute("name")public String lidaye(){return "李大爷";}// 接收请求方法通过 @ModelAttribute 获取name参数@GetMappingpublic String getMethod(@ModelAttribute("name") String name){}
@PathVariable 动态路由{}定义 value: 指定参数名,默认是当前修饰的参数名
required: 参数是否必须存在,默认true(必须存在)
@RestControllerpublic class HelloController {// 定义请求信息@RequestMapping("/hellow/{type}/{page}")public String hello(@PathVariable String type,@PathVariable int page){return "hello";}}
@RequestParam 声明参数value: 参数名
required: 参数是否必须存在,默认true(必须存在)
defaultValue: 参数默认值
@RestControllerpublic class HelloController {@GetMapping("/lidaye")public String hello(@RequestParam("user_name") String name){return name;}}
@SessionAttribute 获取session中的数据value: session中的key
required: 参数是否必须存在,默认true(必须存在)
@CookieValue 获取cookie中的数据value: cookie中的key
required: 参数是否必须存在,默认true(必须存在)
defaultValue: 默认值
@RestControllerpublic class HelloController {@GetMapping("/lidaye")public String hello(Lidaye ldy){return ldy;}}
@ResponseBody 方法/类声明为响应接口
// 不使用 @RestController 注册@Controllerpublic class HelloController {// 声明为响应接口@ResponseBody@GetMapping("/lidaye")public String hello(){return "hello";}}
@RequestBody 获取完整请求体的内容
@RestControllerpublic class HelloController {@PostMapping("/lidaye")// required 默认为true 必须有内容public String hello(@RequestBody(required = false) String body){return body;}}
@ModelAndView@RestControllerAdvice 统一响应处理ResponseBodyAdvicevalue:
basePackageClasses:
assignableTypes:
annotations:
@RestControllerAdvicepublic class ControllerResult implements ResponseBodyAdvice {@Overridepublic boolean supports(MethodParameter methodParameter, Class aClass) {// methodParameter: 方法对象// aClass: http信息转换器类(默认jackson)// 返回 true 才会执行 beforeBodyWrite()return !methodParameter.getMethod().getReturnType().equals(Void.TYPE);}@Overridepublic Object beforeBodyWrite(Object o, MethodParameter methodParameter, MediaType mediaType, Class aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {// o: 返回值// methodParameter: 方法对象// mediaType: mediaType 媒体类型(json等...)// aClass: http信息转换器类(默认jackson)// serverHttpRequest: 请求对象// serverHttpResponse: 响应对象// 最终响应内容return null;}}
@ExceptionHandler 全局异常捕获@RestControllerAdvice 内value: 错误类(数组)
@ExceptionHandler(Exception.class)public Result baseException(){return}
@DateTimeFormat 修改日期格式
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")private Date date;
@JSONField 属性序列化设置ordinal: 序列化的顺序
name: json中的参数名
format: 日期格式
serialize: 是否要序列化,默认true
deserialize: 是否解析,默认true
serialzeFeatures:
parseFeatures:
label:
jsonDirect: 默认false
serializeUsing:
deserializeUsing:
alternateNames:
unwrapped: 默认false
@JSONField(ordinal = 2) // 修改顺序@JSONField(name = "user_id") // 修改序列化后的键名private Integer id;@JSONField(ordinal = 1)private String name;/*** 结果:{"name":"xxx","user_id":1}*/
@JsonProperty熟悉序列化设置
value: json中的参数名
required:
index:
defaultValue:
access:
@JsonProperty("isShow") // 设置序列化参数名private boolean show; // 不要把 boolean 类型字段名命名为 is 前缀
redirect: 重定向@ResponseBody等...)
@Controllerpublic class ModelViewController {@RequestMapping("/redirect")public String redirect() {// 站内重定向return "redirect:/model";// 站内重定向带参数// return "redirect:/user/change/?uid=1"// 站外重定向// return "redirect:https://www.baidu.com";// 站外重定向带参数 后面用户名// return "redirect:https://api.github.com/users/zhangwei725"// 站外重定向带参数2// return "https://api.github.com/users/zhangwei725/repos?page=1&per_page=10"}}
forward: 转发@ResponseBody等...)
@Controllerpublic class ModelViewController {@RequestMapping("/forward")public String testForward(Model model) {model.addAttribute("key", "转发");return "forward:index";}}
HandlerInterceptor 接口
<mvc:interceptors ><mvc:interceptor><interceptor下面定义的mapping和exclude-mapping都是可以有多个的><!-- /user/* --><mvc:mapping path="/admin/**" /><mvc:exclude-mapping path="/account/login" /><!-- 不拦截 --><bean class="com.vip.mvc.interceptor.LoginInterceptor"></bean></mvc:interceptor></mvc:interceptors>