成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

spring-mvc的Conveter和Formatter

geekzhou / 2869人閱讀

摘要:的可以將一種類型轉(zhuǎn)換成另一種類型。的類名稱必須為。這個(gè)必須包含一個(gè)屬性,它列出要在應(yīng)用程序中使用的所有定制。在使用時(shí),必須編寫一個(gè)實(shí)現(xiàn)接口的類。方法相反,它是返回目標(biāo)對(duì)象的字符串表示法。為此,在應(yīng)用程序中,選擇比選擇更合適。

1. Converter

Spring的Converter可以將一種類型轉(zhuǎn)換成另一種類型。
在使用時(shí),必須編寫一個(gè)實(shí)現(xiàn)org.springframework.core.convert.converter.Converter接口的java類。這個(gè)接口的聲明如下

public interface Converter {
    T convert(S var1);
}

這里的S表示源類型,T表示目標(biāo)類型。
下面展示了一個(gè)將String類型轉(zhuǎn)換成Date類型的Converter

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.core.convert.converter.Converter;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class StringToDateConverter implements Converter{
    private static final Log logger = LogFactory.getLog(StringToDateConverter.class);
    private String datePattern;

    public StringToDateConverter(String datePattern) {
        this.datePattern = datePattern;
    }

    public Date convert(String s) {
        try {
            SimpleDateFormat dateFormat = new SimpleDateFormat(datePattern);
            dateFormat.setLenient(false);
            return dateFormat.parse(s);
        } catch (ParseException e) {
            throw new IllegalArgumentException("invalid date format. Please use this pattern"" + datePattern + """);
        }
    }
}

為了使用Spring MVC應(yīng)用程序定制的Converter,需要在配置文件中添加一個(gè)conversionService bean。Bean的類名稱必須為org.springframework.context.support.ConversionServiceFactoryBean。這個(gè)bean必須包含一個(gè)converters屬性,它列出要在應(yīng)用程序中使用的所有定制Converter。下面bean聲明注冊(cè)了上面StringToDateConverter。


    
        
            
                
            
        
    

之后,還需要給annotation-driven元素的conversion-service屬性賦上bean名稱,如下

2. Formatter

Formatter和Converter一樣,也是將一種類型轉(zhuǎn)換成另一種類型。但是,F(xiàn)ormatter的源類型必須是一個(gè)String。
在使用時(shí),必須編寫一個(gè)實(shí)現(xiàn)org.springframework.format.Formatter接口的java類。這個(gè)接口的聲明如下

public interface Formatter extends Printer, Parser {
}
public interface Printer {
    String print(T var1, Locale var2);
}
public interface Parser {
    T parse(String var1, Locale var2) throws ParseException;
}

這里的T表示輸入字符串要轉(zhuǎn)換的目標(biāo)類型。
parse方法利用指定的Locale將一個(gè)String解析成目標(biāo)類型。print方法相反,它是返回目標(biāo)對(duì)象的字符串表示法。
下面展示了一個(gè)將String類型轉(zhuǎn)換成Date類型的Formatter

import org.springframework.format.Formatter;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class DateFormatter implements Formatter{
    private String datePattern;
    private SimpleDateFormat dateFormat;

    public DateFormatter(String datePattern) {
        this.dateFormat = dateFormat;
        dateFormat = new SimpleDateFormat(datePattern);
        dateFormat.setLenient(false);
    }
    public Date parse(String s, Locale locale) throws ParseException {
        try {
            SimpleDateFormat dateFormat = new SimpleDateFormat(datePattern);
            dateFormat.setLenient(false);
            return dateFormat.parse(s);
        } catch (ParseException e) {
            throw new IllegalArgumentException("invalid date format. Please use this pattern"" + datePattern + """);
        }
    }

    public String print(Date date, Locale locale) {
        return dateFormat.format(date);
    }
}

為了使用Spring MVC應(yīng)用程序定制的Formatter,需要在配置文件中添加一個(gè)conversionService bean。Bean的類名稱必須為org.springframework.format.support.FormattingConversionServiceFactoryBean。這個(gè)bean可以用一個(gè)formatters屬性注冊(cè)Formatter,用一個(gè)converters屬性注冊(cè)Converter。下面bean聲明注冊(cè)了上面DateFormatter。


    
        
            
                
            
        
    

之后,還需要給annotation-driven元素的conversion-service屬性賦上bean名稱,如下

3. 用Registrar注冊(cè)Formatter

注冊(cè)Formatter的另一種方法是使用Registrar。
下面就用Registrar來注冊(cè)前面的DateFormatter。
先需要實(shí)現(xiàn)org.springframework.format.FormatterRegistrar接口,如下

import org.springframework.format.FormatterRegistrar;
import org.springframework.format.FormatterRegistry;

public class MyFormatterRegistrar implements FormatterRegistrar {
    private String datePattern;

    public MyFormatterRegistrar(String datePattern) {
        this.datePattern = datePattern;
    }

    public void registerFormatters(FormatterRegistry formatterRegistry) {
        formatterRegistry.addFormatter(new DateFormatter(datePattern));
        //register more formatters here
    }
}

有了Registrar,就不需要在Spring MVC配置文件中注冊(cè)Formatter,只要在配置文件中注冊(cè)Registrar就行,如下


    
        
            
                
            
        
    
4. 選擇Converter還是Formatter

Converter是一般工具,可以將一種類型轉(zhuǎn)換成另一種類型。例如,將String轉(zhuǎn)換成Date,或者將Long轉(zhuǎn)換成Date。Converter既可以用在web層,也可以用在其它層中。
Formatter只能將String轉(zhuǎn)成成另一種java類型。例如,將String轉(zhuǎn)換成Date,但它不能將Long轉(zhuǎn)換成Date。所以,F(xiàn)ormatter適用于web層。為此,在Spring MVC應(yīng)用程序中,選擇Formatter比選擇Converter更合適。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/64816.html

相關(guān)文章

  • spring-MVC源碼解讀(一)

    摘要:處理器是繼前端控制器的后端控制器,在的控制下對(duì)具體的用戶請(qǐng)求進(jìn)行處理。由于涉及到具體的用戶業(yè)務(wù)請(qǐng)求,所以一般情況需要程序員根據(jù)業(yè)務(wù)需求開發(fā)。 1、mcv整體架構(gòu)和流程 showImg(https://segmentfault.com/img/bV55Qq?w=860&h=406); 用戶發(fā)送請(qǐng)求至前端控制器 DispatcherServlet DispatcherServlet 收到...

    I_Am 評(píng)論0 收藏0
  • 『SpringMVC』<context:include-filter>&<

    摘要:現(xiàn)在給定一個(gè)項(xiàng)目的包結(jié)構(gòu)在中有以下配置只掃描注解可以看出要把最后的包寫上,不能包含子包,所以不能寫成。   大家好,我是豬弟,豬在我心中從來不是蠢的代名詞,而是懶的代名詞,本次準(zhǔn)備記錄一個(gè)在開發(fā)測(cè)試過程中遇到的問題,跟蹤了三天spring和第三方RPC組件的源碼,最終發(fā)現(xiàn)了問題是因?yàn)榈谌浇M件沒有處理好而父子容器導(dǎo)致的,還有一個(gè)因素是spring注解掃描重疊。 Spring版本:4.3...

    darryrzhong 評(píng)論0 收藏0
  • spring-mvc注解

    摘要:關(guān)鍵注解的關(guān)鍵注解主要有其中主要是用于標(biāo)記該類是一個(gè)控制器,用于指示的哪一個(gè)類或方法來處理請(qǐng)求動(dòng)作,即用于標(biāo)識(shí)具體的處理器。默認(rèn)已經(jīng)裝配了作為組件的實(shí)現(xiàn)類,而由使用,將請(qǐng)求信息轉(zhuǎn)換為對(duì)象。 關(guān)鍵注解 springmvc的關(guān)鍵注解主要有@Controller/@RequestMapping/@RequestParam/@PathVariable/@RequestHeader/@Cooki...

    EdwardUp 評(píng)論0 收藏0
  • [鬧著玩-2]spring-mvc 主要流程

    摘要:源碼倉庫本文倉庫三層結(jié)構(gòu)表現(xiàn)層模型業(yè)務(wù)層持久層工作流程用戶前端控制器用戶發(fā)送請(qǐng)求前端控制器后端控制器根據(jù)用戶請(qǐng)求查詢具體控制器后端控制器前端控制器處理后結(jié)果前端控制器視圖視圖渲染視圖前端控制器返回視圖前端控制器用戶響應(yīng)結(jié) SpringMvc 【源碼倉庫】【本文倉庫】 三層結(jié)構(gòu) 表現(xiàn)層 MVC模型 業(yè)務(wù)層 service 持久層 dao 工作流程 用戶->前端控制器:用戶...

    fuchenxuan 評(píng)論0 收藏0
  • SpringMVC入門筆記

    摘要:入門筆記簡介是一種基于的實(shí)現(xiàn)了設(shè)計(jì)模式的請(qǐng)求驅(qū)動(dòng)類型的輕量級(jí)框架,是系開源項(xiàng)目中的一個(gè),和配合使用。配置在中需要添加使用的和映射規(guī)則。入門較快,而掌握起來相對(duì)較難。 SpringMVC入門筆記 1. 簡介 Spring MVC是一種基于Java的實(shí)現(xiàn)了Web MVC設(shè)計(jì)模式的請(qǐng)求驅(qū)動(dòng)類型的輕量級(jí)Web框架 ,是Spring系開源項(xiàng)目中的一個(gè),和IoC配合使用。通過策略接口,Spring...

    zhaochunqi 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<