歡迎光臨
每天分享高質量文章

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 {

    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 {

 

    @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。

   

       

           

       

   

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技能

赞(0)

分享創造快樂