8.1 配置
- Spring MVC的配置是通过继承
WebMvcConfigurerAdapter
类并重载其方法实现的; - 前几个教程已做了得配置包括
- 01点睛Spring MVC 4.1-搭建环境 配置viewResolver
- 03点睛Spring MVC 4.1-REST 静态资源映射
- 04点睛Spring MVC 4.1-拦截器 配置拦截器
- 06点睛Spring MVC 4.1-文件上传 配置multipartResolver
- 07点睛Spring MVC4.1-ContentNegotiatingViewResolver 配置ContentNegotiatingViewResolver
8.2 演示
8.2.1 配置路径匹配参数
-
在Spring MVC中路径参数如果带
.
的话,.
后面的值将被忽略,本例演示配置configurePathMatch
不忽略点后面的参数; -
演示控制器
@RequestMapping("/configPath/{test}")
public @ResponseBody String configPath(@PathVariable String test){
return "request value:"+test;
}
- 运行:访问http://localhost:8080/testSpringMVC/configPath/xx.yy
- 在继承
WebMvcConfigurerAdapter
的DemoMVCConfig
类中重载configurePathMatch
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
configurer.setUseSuffixPatternMatch(false);
}
- 再次运行:访问访问http://localhost:8080/testSpringMVC/configPath/xx.yy
8.2.2 快捷定义ViewController
- 我们经常涉及到页面转向,但没任何处理业务的时候,快捷的页面转向定义会节省好多代码;
- 在views目录下建一个任意的
test.jsp
- 常规的方案是这样写的
@RequestMapping("/mytest")
public String test(){
return "test";
}
- 在继承
WebMvcConfigurerAdapter
的DemoMVCConfig
类中重载addViewControllers
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/mytest").setViewName("/test");
//添加更多
}
- 以上效果等同,均会指向views下的test.jsp
8.2.3 配置HttpMessageConverter
-
HttpMessageConverter
是对http的request和response进行自动转换 -
配置
HttpMessageConverter
可重载下面两个方法任意一个-
configureMessageConverters
:重载会覆盖掉spring mvc默认注册的多个HttpMessageConverter
-
extendMessageConverters
:仅添加一个自定义的HttpMessageConverter
,不覆盖默认注册的HttpMessageConverter
-
-
通过对上面的讲述,我们一般是重载
extendMessageConverters
方法; -
下面我们演示使用js向spring mvc发送自定义格式的字符串(属性用-隔开),通过自定义的
HttpMessageConverter
自动转换成对象,然后通过HttpMessageConverter
输出指定格式到浏览器 -
测试javabean
- Person
package com.wisely.domain;
public class Person {
private String firstName;
private String lastName;
public Person(String firstName, String lastName) {
super();
this.firstName = firstName;
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
- 自定义
HttpMessageConverter
:WiselyMessageConverter
package com.wisely.converters;
import java.io.IOException;
import java.nio.charset.Charset;
import org.springframework.http.HttpInputMessage;
import org.springframework.http.HttpOutputMessage;
import org.springframework.http.MediaType;
import org.springframework.http.converter.AbstractHttpMessageConverter;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.http.converter.HttpMessageNotWritableException;
import org.springframework.util.StreamUtils;
import com.wisely.domain.Person;
public class WiselyMessageConverter extends AbstractHttpMessageConverter<Person> {
//自定义媒体类型
public WiselyMessageConverter(){
super(new MediaType("application", "x-wisely", Charset.forName("UTF-8")));
}
//从request里获得构造Person实例的数据
@Override
protected Person readInternal(Class<? extends Person> clazz,
HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {
String temp = StreamUtils.copyToString(inputMessage.getBody(),
Charset.forName("UTF-8"));
String[] tempArr = temp.split("-");
return new Person(tempArr[0],tempArr[1]);
}
//只支持Person类
@Override
protected boolean supports(Class<?> clazz) {
return Person.class.isAssignableFrom(clazz);
}
//将person实例转换成你想要的字符串格式
@Override
protected void writeInternal(Person person, HttpOutputMessage outputMessage)
throws IOException, HttpMessageNotWritableException {
String out = "hello:" +person.getFirstName() + "-" + person.getLastName();
outputMessage.getBody().write(out.getBytes());
}
}
- 配置
WiselyMessageConverter
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
WiselyMessageConverter converter = new WiselyMessageConverter();
converters.add(converter);
}
注释掉上例的configureContentNegotiation
,这里会自动将媒体类型变为text/html
// 配置ContentNegotiationManager,在无后缀名情况下默认为jsp view resolver
// @Override
// public void configureContentNegotiation(
// ContentNegotiationConfigurer configurer) {
// //忽略请求的header信息,并将contentType置为text/html
// configurer.ignoreAcceptHeader(true).defaultContentType(
// MediaType.TEXT_HTML);
// }
- 测试控制器
@RequestMapping(value = "/convert", produces = { "application/x-wisely" })
public @ResponseBody Person convert(@RequestBody Person person) {
return person;
}
- 测试页面:test.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<div id="resp"></div><input type="button" onclick="req();" value="请求"/>
<script src="js/jquery.js" type="text/javascript"></script>
<script>
function req(){
$.ajax({
url: "convert",
data: "wang-yunfei",//注意此处的格式
type:"POST",
contentType:"application/x-wisely",
success: function(data){
$("#resp").html(data);
}
});
}
</script>
</body>
</html>
- 运行效果
新书推荐《JavaEE开发的颠覆者: Spring Boot实战》,涵盖Spring 4.x、Spring MVC 4.x、Spring Boot企业开发实战。
京东地址:http://item.jd.com/11894632.html
当当地址:http://product.dangdang.com/23926195.html
亚马逊地址:http://www.amazon.cn/图书/dp/B01D5ZBFUK/ref=zg_bsnr_663834051_6
淘宝地址:https://item.taobao.com/item.htm?id=528426235744&ns=1&abbucket=8#detail
或自己在京东、淘宝、亚马逊、当当、互动出版社搜索自选。
相关推荐
第二部分 点睛Spring MVC 4.x 第4 章 Spring MVC 基础 72 4.1 Spring MVC 概述 73 4.2 Spring MVC 项目快速搭建 74 4.2.1 点睛 74 4.2.2 示例 74 4.3 Spring MVC 的常用注解 82 4.3.1 点睛 82 4.3.2 示例 83 4.4 ...
第二部分 点睛Spring MVC 4.x 第4 章 Spring MVC 基础 72 4.1 Spring MVC 概述 73 4.2 Spring MVC 项目快速搭建 74 4.2.1 点睛 74 4.2.2 示例 74 4.3 Spring MVC 的常用注解 82 4.3.1 点睛 82 4.3.2 示例 83 4.4 ...
第二部分 点睛Spring MVC 4.x 第4 章 Spring MVC 基础 72 4.1 Spring MVC 概述 73 4.2 Spring MVC 项目快速搭建 74 4.2.1 点睛 74 4.2.2 示例 74 4.3 Spring MVC 的常用注解 82 4.3.1 点睛 82 4.3.2 示例 83 4.4 ...
国元点睛-20230825-国元期货-23页
综合实践-保护眼睛-预防近视-四年级.doc
让消费者眼睛亮起来--稀世宝矿泉水整合营销策划案例(doc 20).doc
蓝鲸的眼睛读后感-14页.pdf
bugscan发展历程以及框架改进.pdf 基于正则类sql注入防御的绕过技巧.pdf 如何优雅的穿透linux内网.pdf 花式玩转bugscan插件.pdf 过滤型插件与反向代理的火花.pdf
这是一款保护眼睛的小软件,绿色软件,不需安装即可使用,试一下吧。
四年级语文下册 6 眼睛 永生的眼睛教案 北师大版-北师大版小学四年级下册语文教案.doc
使用OpenCV1.0实现了眼睛状态识别,首先用harr检测眼睛,然后用模板匹配的方法标记眼睛状态。 程序需要使用Eyes45x11.xml Mouth25x15.xml Nose25x15.xml,将其放到C:\Program Files\OpenCV\data\haarcascades目录下...
四年级语文下册 6 眼睛 我只看见你的眼睛教案 北师大版-北师大版小学四年级下册语文教案.doc
五年级上册数学试题-第九单元爱护眼睛—统计测试卷-青岛版五四制(含答案).pdf
眼睛穴位图-睛明穴-取穴方法 方便经常上网的朋友使用
图像与眼睛(2009-04-1.pdf
把网页背景变成眼睛保护色或适合夜晚阅读的夜间模式,一些无法变色的小区块可以通过单击进行变色;
中文说明 | |说明维护过项目的人应该都有体会, 如果接口文档是单独编写的(org-mode、markdown、rap 甚至是 word 等), 随着项目周期的推进, 接口文档和真实代码之间的差距会越来越远.基于 swagger 的一些细节不那么让...
在电脑面前坐久了,起来动一下吧 眼睛保护卫士,你不动都不行。。。。 试一下吧!!!
alien skin Eye Candy 7是一款非常强大的PS滤镜插件。包含了金属字、火焰、闪电、纹理等30多种实用特效,是设计师必备的插件之一。
基于DeepPupilNet深度学习网络的眼睛定位算法仿真_源码