第一个实例
- 导入jar包如下:
jackson-annotations-2.1.5.jar
jackson-core-2.1.5.jar
jackson-databind-2.1.5.jar
1.控制器中的方法
@Controller
public class SpringMVCTestNew {
@Autowired
private EmployeeDao employDao ;
/**
* 测试返回json数据
* @return
*/
@ResponseBody
@RequestMapping("/testJson")
public Collection<Employee> testJson()
{
return employDao.getAll();
}
}
2.index.jsp
<script type="text/javascript" src="scripts/jquery-1.9.1.min.js"></script>
<script type="text/javascript">
$(function(){
$("#testJson").click(function(){
var url = this.href;
var args = {};
$.post(url, args, function(data){
console.log(data)
for(var i = 0; i < data.length; i++){
var id = data[i].id;
var lastName = data[i].lastName;
alert(id + ": " + lastName);
}
});
return false;
});
})
</script>
<body>
<a href="testJson" id="testJson">ajax测试返回json格式的数据</a>
<br><br>
</body>
实现原理
-
HttpMessageConverter<T> 是 Spring3.0 新添加的一个接口,负责将请求信息转换为一个对象(类型为 T),将对象(类型为 T)输出为响应信息
Paste_Image.png
-
HttpMessageConverter<T>的实现类
Paste_Image.png
-
加入 jackson jar 包后, RequestMappingHandlerAdapter
装配的 HttpMessageConverter 如下:
Paste_Image.png
-
当控制器处理方法使用到 @RequestBody/@ResponseBody 或
HttpEntity<T>/ResponseEntity<T> 时, Spring 首先根据请求头或响应头的
Accept 属性选择匹配的 HttpMessageConverter, 进而根据参数类型或泛型类型的过滤得到匹配的 HttpMessageConverter, 若找不到可用的
HttpMessageConverter 将报错. -
@RequestBody 和 @ResponseBody 不需要成对出现
Paste_Image.png
关于国际化:
新建三个国际化资源文件:
i18n.properties
文件内容:

i18n_zh_CN.properties
中文文件内容:

i18n_en_US.properties
英文文件内容:

配置springmvc.xml
<!-- 配置国际化资源文件,用来验证错误信息显示 -->
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="i18n"></property>
</bean>
- 在页面上能够根据浏览器语言设置的情况对文本(不是内容), 时间, 数值进行本地化处理,
使用 JSTL 的 fmt 标签
在WEB_INF/views/i18n.jsp中使用fmt标签
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<fmt:message key="i18n.user"></fmt:message>
配置springmvc.xml
文件直接访问i18n.jsp
<!-- 国际化测试,配置直接请求jsp页面 -->
<mvc:view-controller path="i18n" view-name="i18n"/>
访问测试:http://localhost:8081/spring-mvc-2/i18n
浏览器输出结果:
用户名
此时如果在浏览器改变浏览器的语言设置为英文,再次访问则会显示 username
- 可以在 bean 中获取国际化资源文件 Locale 对应的消息, 在 bean 中注入
ResourceBundleMessageSource
的示例, 使用其对应的 getMessage 方法即可
在controller的目标方法中获取国际化属性:
@RequestMapping("/i18n")
public String testI18n(Locale locale){
String val = messageSource.getMessage("i18n.user", null, locale);
System.out.println(val);
return "i18n";
}
此时访问:http://localhost:8081/spring-mvc-2/testI18n,会在控制台输出:用户名
- 可以通过超链接切换 Locale, 而不再依赖于浏览器的语言设置情况, 配置 LocalResolver 和 LocaleChangeInterceptor
配置springmvc.xml
配置文件
<!-- 配置SessionLocalResolver和LoaclChangeInterceptor拦截器, 可以通过超链接切换 Locale而不再依赖于浏览器的语言设置情况-->
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"></bean>
<!-- 配置LoaclChangeInterceptor拦截器 -->
<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"></bean>
</mvc:interceptors>
修改 i18n.jsp
页面
<a href="i18n?locale=zh_CH">中文</a>
<br><br>
<a href="i18n?locale=en_US">英文</a>

网友评论