Spring Converter 入門之字元串轉化為枚舉
(點擊
上方公眾號
,可快速關注)
來源:乞力馬扎羅的雪雪 ,
blog.csdn.net/chenyufeng1991/article/details/78242369
Converter是Spring3中引入的一項比較特殊的功能,其實就是一個轉換器,可以把一種類型轉換為另一種類型。尤其是在web項目中比較常見,可以對介面的入參做校驗,把前端的入參的類型轉換後為後端可以使用的類型。如常常用來做類型轉換、字元串去空、日期格式化等。在Spring3之前進行類型轉換都是使用PropertyEditor,使用PropertyEditor的setAsText()方法可以實現String轉向特定的類型,但是它的最大的一個缺陷就是只支持String轉為其他類型。
Spring中的三種類型轉換介面分別為:
Converter介面:使用最簡單,但是不太靈活;
ConverterFactory介面:使用較複雜,稍微靈活一點;
GenericConverter介面:使用最複雜,也最靈活;
由於枚舉類型在開發中很常見,而前端無法直接傳入一個Java中的枚舉類型。該篇博客將會使用Converter來把一個前端傳入的String轉化為枚舉,以方便使用。
首先了解一下Converter介面
Spring中Converter介面如下:
package org.springframework.core.convert.converter;
public interface Converter<S, T> {
T convert(S var1);
}
即可以把S類型轉化為T類型,並支持泛型。
首先建立一個簡單的對象類Person
其中的一個欄位性別GenderEnum使用了枚舉。
public class Person {
private String name;
private GenderEnum type;
public Person() {
}
public Person(GenderEnum type, String name) {
this.type = type;
this.name = name;
}
public GenderEnum getType() {
return type;
}
public void setType(GenderEnum type) {
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person{" +
"type=" + type +
", name="" + name + """ +
"}";
}
}
需要轉化的枚舉類
兩個欄位分別為male、female。現在的需求是前端分別傳入「male」、「female」,後台就能轉換為枚舉中的male,female.
public enum GenderEnum {
male("male"),
female("female");
private final String value;
GenderEnum(String v) {
this.value = v;
}
public String toString() {
return this.value;
}
public static GenderEnum get(int v) {
String str = String.valueOf(v);
return get(str);
}
public static GenderEnum get(String str) {
for (GenderEnum e : values()) {
if (e.toString().equals(str)) {
return e;
}
}
return null;
}
}
Convert轉換類
在這個類中實現了Converter介面,並重寫convert方法。
final class StringToGenderEnumConverter implements Converter<String, GenderEnum> {
@Override
public GenderEnum convert(String source) {
String value = source.trim();
if ("".equals(value)) {
return null;
}
return GenderEnum.get(Integer.parseInt(source));
}
}
spring-mvc.xml配置
在Spring配置文件中,配置conversionService。
<mvc:annotation-driven conversion-service="conversionService"/>
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"
<property name="converters"
<set>
<bean class="com.chenyufeng.springmvc.common.converter.StringToGenderEnumConverter"/>
</set>
</property>
</bean>
Controller
在Controller介面中,對於枚舉欄位,前端可以直接傳入String類型的「male」、「female」,Converter可以自動進行轉換。
@Api(value = "converter", description = "自動轉換", produces = MediaType.APPLICATION_JSON_VALUE)
@Controller
@RequestMapping("/converter")
public class ConverterController {
@Autowired
private ConverterService converterService;
@RequestMapping(value = "/savePerson", method = RequestMethod.GET)
@ResponseBody
public String savePerson(
@ApiParam(value = "type") @RequestParam GenderEnum type,
@ApiParam(value = "ID") @RequestParam String id) {
Person person = new Person(type, id);
return converterService.savePerson(person);
}
}
以上案例上傳至:https://github.com/chenyufeng1991/StartSpringMVC_Modules中。
看完本文有收穫?請轉發分享給更多人
關注「ImportNew」,提升Java技能
※通向架構師的道路 ( 第十七天 ) IBM Websphere 集群探秘 – WASND
※不同的垃圾回收器的比較
TAG:ImportNew |