日韩性视频-久久久蜜桃-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ò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 制服丝袜在线第一页 | 在线免费国产 | 国产亚洲精品久久 | 操比网站 | 无遮挡毛片 | 久久色在线 | 伊人久久大香线蕉综合网站 | 国产理论视频在线观看 | 亚洲精品成人无码熟妇在线 | 人人爱av| 亚洲国产网站 | 亚洲视频手机在线观看 | 巨茎人妖videos另类 | 五月天中文字幕在线 | 国产精久久一区二区三区 | 亚洲色图在线视频 | 中文字幕一区二区三区乱码在线 | 精品国模一区二区三区 | 精品一区二区av | 91视频综合网 | 高h全肉污文play带道具 | 私人影院毛片 | 国产xxxxx| 一级a性色生活片久久无 | 日韩一级中文字幕 | 国产一区二区三区播放 | 99久久久国产 | 欧美13p| 久久在线免费视频 | 亚洲精品一区二区三区精华液 | 午夜av片 | www..com国产| www亚洲天堂 | 免费在线观看a视频 | 日本在线免费播放 | 欧美性猛交ⅹ乱大交3 | 性开放视频| 久久人| 中文字幕在线观看第二页 | 极品粉嫩小仙女高潮喷水久久 | 精品成人中文无码专区 | 深夜视频在线播放 | 欧美性aaa | 一级特级片 | 综合伊人久久 | 美女诱惑av | 在线看片中文字幕 | 夜夜爽妓女8888视频免费观看 | 日韩欧美一区二区一幕 | 夜夜久久 | 网站在线播放 | 国产黄色a | 国产精品一区二区在线 | 激情草逼 | 黄色污小说 | 欧美综合在线一区 | 久草视频这里只有精品 | 真人毛片视频 | 久久成人毛片 | 中文av网站 | 亚洲天堂网一区二区 | 高清在线一区二区 | 97精品一区二区三区 | 玩弄丰满少妇xxxxx性多毛 | 性猛交富婆╳xxx乱大交麻豆 | 免费性视频 | 国产成人91 | 蜜桃av网| 人妖和人妖互交性xxxx视频 | 国产成人超碰人人澡人人澡 | 中文人妻av久久人妻18 | av资源新版在线天堂 | 亚洲欧美精品aaaaaa片 | 黑人玩弄人妻一区二区三区 | 久久99网| 国产综合社区 | 黄色免费视屏 | 小嫩嫩精品导航 | 成人免费区一区二区三区 | av涩涩 | www.啪啪 | 日韩欧美片 | 九一天堂| 樱花草涩涩www在线播放 | 污版视频在线观看 | 四虎新网址 | 69亚洲| 一本久久综合 | 青青草视频在线观看 | 91精品国产综合久久精品图片 | 日韩av在线第一页 | 日韩精品 欧美 | 男人狂揉女人下部视频 | 欧美性综合| 十八岁世界在线观看高清免费韩剧 | jizzjizzjizz亚洲| 91天堂在线观看 | 成人久久精品人妻一区二区三区 | 欧美男人又粗又长又大 |