日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

java converter转换器_springboot 自定义转换器(converter)

發(fā)布時(shí)間:2025/3/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java converter转换器_springboot 自定义转换器(converter) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

springboot?自定義轉(zhuǎn)換器(converter)

應(yīng)用:實(shí)現(xiàn)一對(duì)一轉(zhuǎn)換,如將字符串轉(zhuǎn)換為pojo、枚舉等

***********************

相關(guān)類與接口

Converter

@FunctionalInterface

public interface Converter {

@Nullable

T convert(S source); //將類型S的對(duì)象轉(zhuǎn)換為類型T的對(duì)象

}

ConverterFactory

public interface ConverterFactory {

Converter getConverter(Class targetType);

}

********************

部分內(nèi)置converter、converterFactory

EnumToStringConverter:將枚舉字面量轉(zhuǎn)換為字符串

final class EnumToStringConverter extends AbstractConditionalEnumConverter implements Converter, String> {

public EnumToStringConverter(ConversionService conversionService) {

super(conversionService);

}

@Override

public String convert(Enum> source) {

return source.name();

}

}

StringToNumerConverterFactory:字符串轉(zhuǎn)換為數(shù)字

final class StringToNumberConverterFactory implements ConverterFactory {

@Override

public Converter getConverter(Class targetType) {

return new StringToNumber<>(targetType);

}

private static final class StringToNumber implements Converter {

private final Class targetType;

public StringToNumber(Class targetType) {

this.targetType = targetType;

}

@Override

public T convert(String source) {

if (source.isEmpty()) {

return null;

}

return NumberUtils.parseNumber(source, this.targetType);

}

}

}

StringToEnumConverterFactory:根據(jù)枚舉字面量將字符串轉(zhuǎn)換為枚舉對(duì)象

final class StringToEnumConverterFactory implements ConverterFactory {

@Override

public Converter getConverter(Class targetType) {

return new StringToEnum(ConversionUtils.getEnumType(targetType));

}

private static class StringToEnum implements Converter {

private final Class enumType;

public StringToEnum(Class enumType) {

this.enumType = enumType;

}

@Override

public T convert(String source) { //根據(jù)枚舉的字面量進(jìn)行轉(zhuǎn)換

if (source.isEmpty()) {

// It's an empty enum identifier: reset the enum value to null.

return null;

}

return (T) Enum.valueOf(this.enumType, source.trim());

}

}

}

***********************

示例:自定義枚舉轉(zhuǎn)換器,根據(jù)枚舉屬性進(jìn)行轉(zhuǎn)換

********************

myenum?層

Sex

public enum Sex {

Male(1,"男"),Female(2,"女");

private Integer id;

private String name;

Sex(Integer id,String name){

this.id=id;

this.name=name;

}

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

@Override

public String toString() {

return "Sex{" +

"id=" + id +

", name='" + name + '\'' +

'}';

}

}

********************

pojo?層

Person

@Data

public class Person {

private String name;

private Integer age;

private Sex sex;

}

********************

config?層

StringToEnumConverter:根據(jù)屬性name將字符串轉(zhuǎn)換為枚舉對(duì)象

@Component

public class StringToEnumConverter implements Converter {

@Override

public Sex convert(String source) {

Sex sex=Sex.Male;

if ("女".equals(source)){

sex=Sex.Female;

}

return sex;

}

}

說(shuō)明:將轉(zhuǎn)換器注冊(cè)為容器bean后,可自動(dòng)注冊(cè),不需要使用WebMvcConfigurer

WebConfig:注冊(cè)converter

@Component

public class WebConfig implements WebMvcConfigurer {

@Resource

private StringToEnumConverter stringToEnumConverter;

@Override

public void addFormatters(FormatterRegistry registry) {

registry.addConverter(stringToEnumConverter);

}

}

********************

controller?層

HelloController

@RestController

public class HelloController {

@RequestMapping("/hello")

public String hello(Sex sex){

System.out.println(sex);

return "success";

}

@RequestMapping("/hello2")

public String hello2(Person person){

System.out.println(person);

return "success";

}

}

***********************

默認(rèn)枚舉轉(zhuǎn)換器測(cè)試

localhost:8080/hello?sex=Male

2020-07-11 10:09:53.896 INFO 6652 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'

2020-07-11 10:09:53.908 INFO 6652 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Completed initialization in 12 ms

Sex{id=1, name='男'}

localhost:8080/hello?sex=男

2020-07-11 10:08:33.021 INFO 14848 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 5 ms

2020-07-11 10:08:33.056 WARN 14848 --- [nio-8080-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'com.example.demo.myenum.Sex'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [com.example.demo.myenum.Sex] for value '男'; nested exception is java.lang.IllegalArgumentException: No enum constant com.example.demo.myenum.Sex.男]

說(shuō)明:默認(rèn)的枚舉轉(zhuǎn)換器根據(jù)字面量進(jìn)行轉(zhuǎn)換,使用屬性轉(zhuǎn)換會(huì)報(bào)錯(cuò)

***********************

自定義枚舉轉(zhuǎn)換器測(cè)試

localhost:8080/hello?sex=女

2020-07-11 10:00:03.110 INFO 13032 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'

2020-07-11 10:00:03.119 INFO 13032 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 9 ms

Sex{id=2, name='女'}

localhost:8080/hello2?name=瓜田李下&age=20&sex=女

Person(name=瓜田李下, age=20, sex=Sex{id=2, name='女'})

說(shuō)明:自定義枚舉轉(zhuǎn)換器生效,可根據(jù)枚舉屬性進(jìn)行轉(zhuǎn)換

本文地址:https://blog.csdn.net/weixin_43931625/article/details/107279831

如您對(duì)本文有疑問(wèn)或者有任何想說(shuō)的,請(qǐng)點(diǎn)擊進(jìn)行留言回復(fù),萬(wàn)千網(wǎng)友為您解惑!

與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的java converter转换器_springboot 自定义转换器(converter)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲最新中文字幕 | 亚洲激情视频一区 | 欧美性猛交xxxx黑人猛交 | 亚洲综合视频网 | 特黄一级大片 | 东京热一区二区三区四区 | 女性私密整形视频 | 欧美日韩精品 | 97色吧| 在线免费看黄 | 爱视频福利网 | 中文字幕在线观看视频网站 | 91文字幕巨乱亚洲香蕉 | 在线免费av观看 | 97伊人网 | 美丽的小蜜桃2:美丽人生 | 天天玩天天干 | 亚洲国产精一区二区三区性色 | 欧美一a一片一级一片 | 91国内在线 | 亚洲欧美视频在线 | 日韩午夜免费 | 女人被男人躁得好爽免费视频 | 男女视频免费观看 | 亚洲美女视频在线 | 黑人极品ⅴideos精品欧美棵 | 日本精品一区二区视频 | 国产精品久久久久无码av | 黑名单上的人全集免费观看 | 欧美视频在线观看免费 | 九九免费精品视频 | 国产美女精品一区二区三区 | 天堂中文在线网 | 少妇又紧又色又爽又刺激视频 | 蜜臀中文字幕 | 日本在线视频一区二区三区 | 91精品国产一区二区三区蜜臀 | 日本激情一区 | 香蕉av网站 | 伊人网狼人 | 国产色综合网 | 欧美黑吊大战白妞 | 巨胸喷奶水www久久久免费动漫 | 中文字幕少妇在线三级hd | 久久精品不卡 | 日韩欧美精品一区 | 欧美一区二区三区在线观看视频 | 精品人妻一区二区三区四区五区 | 91刺激视频 | 9色视频 | 国产人与禽zoz0性伦 | av片手机在线观看 | 色妞ww精品视频7777 | 免费成人小视频 | 久久网站免费看 | 国产精品久久一区二区三区动 | brazzers欧美极品少妇 | 九九热在线视频播放 | 岛国av免费 | 天堂av亚洲av国产av电影 | 国产精品无码免费播放 | www.av88| 欧美呦呦呦 | 91高清在线视频 | 免费黄在线看 | 日本wwww视频 | 91传媒网站| 看全色黄大色黄大片女一次牛 | 欧美激情一区二区三区p站 欧美mv日韩mv国产网站app | 中文一二区 | 欧美日韩国产三级 | 国产精品www色诱视频 | 男同毛片| 91视频亚洲 | 欧美日韩不卡一区二区三区 | 久草高清 | 国产精选久久久 | 日韩在线观看免费网站 | 4444亚洲人成无码网在线观看 | 国产成a人亚洲精品 | 欧美成人激情视频 | 日韩字幕在线观看 | 国产精品伦子伦免费视频 | 综合激情四射 | 国产孕妇一区二区三区 | 91av福利视频 | 国产吞精囗交久久久 | 国产精品国产一区二区三区四区 | 成人一级免费视频 | 亚洲第一区在线 | 亚洲爽片 | 欧美日韩不卡 | 国产精品19乱码一区二区三区 | 午夜精品久久久久久久蜜桃 | 欧美激情网 | 在线免费观看日韩视频 | 永久免费,视频 | 国产二级毛片 | 成人动漫亚洲 |