1,需求
有时候我们接收到的参数为String类型的,但是我们需要将它们转化为其他类型的如:date类型,枚举类型等等,spring mvc为我们提供了这样的功能。
2,配置文件
在springmvc.xml配置文件中添加如下代码:
<mvc:annotation-driven conversion-service="conversionService" />
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <property name="converters"> <list> <bean class="com.cmc.core.converters.StringToESportConverter" /> </list> </property> </bean>
别忘记上面那句,是注册转换器的。
3,添加StringToESportConverter类
package com.cmc.core.converters;import org.springframework.core.convert.converter.Converter;import com.gionee.xo.healthy.enums.ESport;/**
* 配置spring mvc自动接收ESport
*
* @author chenmc
*/public class StringToESportConverter implements Converter<String, ESport> { @Override
public ESport convert(String source) {
String value = source.trim(); if ("".equals(value)) { return null;
} return ESport.get(Integer.parseInt(source));
}
}4,添加ESport枚举类
package com.cmc.xo.healthy.enums;import java.util.Locale;import com.cmc.core.base.utils.I18N;/**
* 运动枚举
*
* @author chenmc
* @date 2017年4月18日 下午8:32:33
*/public enum ESport {
run("0"),//跑步
cycling("1");//骑行
private final String value; private ESport(String v) { this.value = v;
}
public String toString() { return this.value;
} public static ESport get(int v) {
String str = String.valueOf(v); return get(str);
} public static ESport get(String value) { for (ESport e : values()) { if (e.toString().equals(value)) { return e;
}
} return null;
}
public String getName() { return I18N.getEnumName(this, Locale.CHINA);
}
}转换主要用到了get(String value)这个方法
5,controller中代码
@ApiOperation(value="获取某用户单种运动的总信息", notes="返回某用户的运动总次数和总耗时总消耗")@RequestMapping( value = {"/sports/{useruid:.{32}}/{type:\\d{1}}/sum"}, method = RequestMethod.GET, produces = "application/json;charset=UTF-8")@ResponseBodypublic String get_count(HttpServletRequest request, @PathVariable String useruid, @PathVariable ESport type) { return BaseResultHP.jsonResultSuccess(so.getSum(useruid, type));
}url中传入的type为String类型的数字,而我接收参数@PathVariable ESport type