spring MVC应用(三)---常用功能总结

本文介绍了 SpringMVC 中消息转换器的配置方法,包括 JSON 和 XML 的转换,并展示了如何通过配置实现请求处理前后的拦截操作及国际化支持。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值