springmvc的消息转换器
将实例作为笑消息体返回时,可以转换为json或者xml形式返回给浏览器。
引入消息转换器需要的依赖:
<!-- 消息转换器将实例等转换为json -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.7.3</version>
</dependency>
<!-- 消息转换器将实例等转换为xml -->
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-parameter-names</artifactId>
<version>2.9.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.9.1</version>
</dependency>
springmvc的配置文件中增加消息转换器相关的配置:
<bean id="objectMapper" class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean"
p:indentOutput="true"
p:simpleDateFormat="yyyy-MM-dd"
p:modulesToInstall="com.fasterxml.jackson.module.paramnames.ParameterNamesModule"/>
<bean id="xmlMapper" parent="objectMapper" p:createXmlMapper="true"/>
<mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<bean
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper" ref="objectMapper" />
</bean>
<bean
class="org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter">
<property name="objectMapper" ref="xmlMapper" />
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
在controller接口中通过消息头指定返回给浏览器的类型:
// @RequestMapping(value="/user",produces=MediaType.APPLICATION_JSON_VALUE)
@RequestMapping(value="/user",produces=MediaType.APPLICATION_XHTML_XML_VALUE)
@ResponseBody
public Object getUser() {
User user = new User();
user.setId("111");
user.setName("hurricane");
return user;
}
springmvc拦截器
springmvc配置文件中增加拦截器相关的配置:
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/admin/**"/>
<bean class="com.hurricane.learn.biz.interceptor.MyInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
自定义拦截器实现:
package com.hurricane.learn.biz.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class MyInterceptor implements HandlerInterceptor{
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandle");
return true;
}
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("postHandle");
}
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
throws Exception {
System.out.println("afterCompletion");
}
}
这样拦截器就可以生效了。
springmvc国际化
springmvc文件中添加配置:
<!-- 存储区域设置信息 SessionLocaleResolver类通过一个预定义会话名将区域化信息存储在会话中。 -->
<bean id="localeResolver"
class="org.springframework.web.servlet.i18n.SessionLocaleResolver" />
<!-- 国际化资源文件 -->
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="classpath:messages" />
<!-- 如果在国际化资源文件中找不到对应代码的信息,就用这个代码作为名称 -->
<property name="useCodeAsDefaultMessage" value="true" />
</bean>
<mvc:interceptors>
<bean id="localeChangeInterceptor"
class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="lang" />
</bean>
</mvc:interceptors>
国际化资源文件:
src/main/resources/messages_en.properties:
userName=hurricane
src/main/resources/messages_zh.properties:
userName=飓风
jsp文件中引入spring的国际化标签:
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
使用国际化信息的地方,格式为:
<spring:message code="userName"/>
为了实现国际化,需要添加参数(拦截器中配置的paramName)lang,如:
http://localhost:8080/project/my/hello?lang=en
http://localhost:8080/project/my/hello?lang=zh
参考:https://www.cnblogs.com/tenWood/p/7535502.html
参考:
https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html