javascript
java converter转换器_在SpringMVC中设置自定义类型转换器Converter
前言
在SpringMVC中為我們提供了許多內(nèi)置的類型轉(zhuǎn)換器,當(dāng)我們?cè)贖TML表單中發(fā)起一個(gè)請(qǐng)求時(shí),Spring會(huì)根據(jù)表單項(xiàng)中name屬性的值映射到POJO的屬性名,調(diào)用相對(duì)性屬性的set方法幫我們把表單中的多個(gè)屬性轉(zhuǎn)化為一個(gè)POJO對(duì)象,這樣我們?cè)贑ontroller方法中就可以直接使用POJO作為參數(shù)得到提交的數(shù)據(jù)。但有時(shí)候會(huì)存在其他情況,比如你把一個(gè)POJO對(duì)象的多個(gè)屬性都寫在一個(gè)input標(biāo)簽中,在這種情況下Spring無(wú)法自動(dòng)幫我轉(zhuǎn)化為POJO對(duì)象,這種情況下我們可以通過(guò)設(shè)置自定義類型轉(zhuǎn)化器,按照我們的規(guī)則去轉(zhuǎn)化成POJO對(duì)象。
代碼
首先,寫一個(gè)類并實(shí)現(xiàn)Converter接口,在這個(gè)接口中有一個(gè)方法T convert(S var1),在該方法中設(shè)置類型轉(zhuǎn)化規(guī)則。其中,S是傳入的類型,T放回的類型。 public interface Converter { @Nullable T convert(S var1); }
Dome如下
public class BookConverter implements Converter {
@Override
public Book convert(String s) {
String[] split = s.split("-");
Book book = null;
if (split.length==2){
book = new Book();
book.setBname(split[0]);
book.setPrice(new BigDecimal(split[1]));
}
return book;
}
}
Book類為
public class Book {
private String bname;
private BigDecimal price;
//省略get和set方法
然后在SpringMVC的配置文件中配置ConversionServiceFactoryBean
//這里可以有多個(gè)自定義的類型轉(zhuǎn)化器
在input標(biāo)簽中輸入
JAVA從入門到入土-9999
Spring會(huì)根據(jù)我們自定義的規(guī)則轉(zhuǎn)化為所需要的類型,在Controller方法中便可以直接使用對(duì)應(yīng)的類型作為參數(shù)接收傳給后端的參數(shù)
public String testConverter(@RequestParam("book") Book book){
如果在項(xiàng)目中使用了@NumberFormat或@DateTimeFormat注解,則需要使用FormattingConversionServiceFactoryBean對(duì)象工廠,在FormattingConversionServiceFactoryBean中已經(jīng)注冊(cè)了NumberFormatAnnotationFormatterFactroy和JodaDateTimeFormatAnnotationFormatterFactroy,支持使用@NumberFormat、@DateTimeFormat對(duì)接對(duì)數(shù)字類型和日期類型的格式化
總結(jié)
以上是生活随笔為你收集整理的java converter转换器_在SpringMVC中设置自定义类型转换器Converter的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux学习之运维篇
- 下一篇: python计算选手最后得分并取出前三名