亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Spring Boot拓展XML格式的請(qǐng)求和響應(yīng)操作過(guò)程

 更新時(shí)間:2023年10月27日 10:19:45   作者:Miaow.Y.Hu  
在我們開(kāi)發(fā)過(guò)程中,我們經(jīng)常使用的參數(shù)絕大多少事HTML和JSON格式的請(qǐng)求和響應(yīng)處理,但是我們?cè)趯?shí)際開(kāi)發(fā)過(guò)程中,我們可能經(jīng)歷一些,比如對(duì)于XML格式的請(qǐng)求,本文給大家介紹Spring Boot拓展XML格式的請(qǐng)求和響應(yīng),感興趣的朋友一起看看吧

在我們開(kāi)發(fā)過(guò)程中,我們經(jīng)常使用的參數(shù)絕大多少事HTML和JSON格式的請(qǐng)求和響應(yīng)處理,但是我們?cè)趯?shí)際開(kāi)發(fā)過(guò)程中,我們可能經(jīng)歷一些,比如對(duì)于XML格式的請(qǐng)求,我們?cè)诤蠖藨?yīng)該如何接收,并且如何將XML格式的參數(shù)變成對(duì)象,然后返回一個(gè)XML對(duì)象呢?

實(shí)現(xiàn)原理

我們?cè)谔幚鞽ML格式的數(shù)據(jù)的時(shí)候,需要知道我們最初學(xué)習(xí)Spring系列中的Spring MVC。因?yàn)樵赟pring MVC中我們有一個(gè)消息轉(zhuǎn)換器的概念,其主要負(fù)責(zé)處理不同格式的請(qǐng)求數(shù)據(jù)進(jìn)行處理,然后將這個(gè)數(shù)據(jù)包裝成為對(duì)象,以便提供更加友好的變成體驗(yàn)。

我們研究Spring MVC的源碼可以得到在Spring MVC中定義了一個(gè)HttpMessageCoverter接口,抽象了消息轉(zhuǎn)換器對(duì)類型的判斷,對(duì)讀寫的判斷與操作,具體如下:

public interface HttpMessageConverter<T> {
    boolean canRead(Class<?> clazz, @Nullable MediaType mediaType);
    boolean canWrite(Class<?> clazz, @Nullable MediaType mediaType);
    List<MediaType> getSupportedMediaTypes();
    T read(Class<? extends T> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException;
    void write(T t, @Nullable MediaType contentType, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException;
}
  • boolean canRead(Class<?> clazz, @Nullable MediaType mediaType):判斷給定的類和媒體類型是否可以被讀取。在處理請(qǐng)求時(shí),用于判斷是否可以將請(qǐng)求的消息體轉(zhuǎn)換為指定的類對(duì)象。
  • boolean canWrite(Class<?> clazz, @Nullable MediaType mediaType):判斷給定的類和媒體類型是否可以被寫入。在處理響應(yīng)時(shí),用于判斷是否可以將指定的類對(duì)象轉(zhuǎn)換為響應(yīng)的消息體。
  • List<MediaType> getSupportedMediaTypes():獲取該消息轉(zhuǎn)換器支持的媒體類型列表。這些媒體類型表示該轉(zhuǎn)換器可以讀取或?qū)懭氲臄?shù)據(jù)格式。
  • - Tread(Class<? extends T> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException:將請(qǐng)求的消息體轉(zhuǎn)換為指定的類對(duì)象。該方法從 HttpInputMessage 中讀取請(qǐng)求的數(shù)據(jù),并將其轉(zhuǎn)換為指定的類對(duì)象。
  • void write(T t, @Nullable MediaType contentType, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException:將指定的類對(duì)象轉(zhuǎn)換為響應(yīng)的消息體。該方法將指定的類對(duì)象轉(zhuǎn)換為字節(jié)流,并寫入到 HttpOutputMessage 中作為響應(yīng)的數(shù)據(jù)。

我們知道,在HTTP中,Content-Type中有各種不同的格式定義,如果需要支持XML格式的消息轉(zhuǎn)換,那就的使用對(duì)應(yīng)的轉(zhuǎn)換器,并且我們知道在Spring MVC中默認(rèn)已經(jīng)有一套采用Jackson實(shí)現(xiàn)的轉(zhuǎn)換器MappingJackson2XmlHttpMessageConverter。

拓展實(shí)現(xiàn)

1. 引入XML消息轉(zhuǎn)換器

如果你是Spring 用戶,并非Spring Boot用戶,那么我們可以引入XML消息轉(zhuǎn)換器。

@Configuration
public class MessageConverterConfig1 extends WebMvcConfigurerAdapter {
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        Jackson2ObjectMapperBuilder builder = Jackson2ObjectMapperBuilder.xml();
        builder.indentOutput(true);
        converters.add(new MappingJackson2XmlHttpMessageConverter(builder.build()));
    }
}

如果你是Spring Boot用戶,那么就直接加入相關(guān)依賴就行了,那么相關(guān)依賴就交于Spring Boot自動(dòng)實(shí)現(xiàn)了:

<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
</dependency>

2. 定義對(duì)象與XML的關(guān)系

做好了基礎(chǔ)配置后,就可以定義XML內(nèi)容對(duì)應(yīng)的Java對(duì)象了:

@Data
@NoArgsConstructor
@AllArgsConstructor
@JacksonXmlRootElement(localName = "User")
public class User {

    @JacksonXmlProperty(localName = "name")
    private String name;
    @JacksonXmlProperty(localName = "age")
    private Integer age;

}

其中:@Data、@NoArgsConstructor、@AllArgsConstructor是lombok簡(jiǎn)化代碼的注解,主要用于生成get、set以及構(gòu)造函數(shù)。@JacksonXmlRootElement、@JacksonXmlProperty注解是用來(lái)維護(hù)對(duì)象屬性在xml中的對(duì)應(yīng)關(guān)系。

上述配置的User對(duì)象,其可以映射的Xml樣例如下(后續(xù)可以使用上述xml來(lái)請(qǐng)求接口):

<User>
    <name>miaow</name>
    <age>4</age>
</User>

3.創(chuàng)建一個(gè)接收xml請(qǐng)求的接口

完成了需要轉(zhuǎn)換的對(duì)象之后,我們可以編寫一個(gè)相關(guān)接口來(lái)接受XML并返回xml。

@Controller
public class UserController {
    @PostMapping(value = "/user",
            consumes = MediaType.APPLICATION_XML_VALUE,
            produces = MediaType.APPLICATION_XML_VALUE)
    @ResponseBody
    public User create(@RequestBody User user) {
        user.setName("姓名 : " + user.getName());
        user.setAge(user.getAge() + 20);
        return user;
    }
}

啟動(dòng)項(xiàng)目之后,我們可以通過(guò)相關(guān)接口工具進(jìn)行請(qǐng)求發(fā)送,例如:

我采用的事ApiFox這個(gè)軟件,如果你有更好的軟件可以選擇您自己的軟件

到此這篇關(guān)于Spring Boot拓展XML格式的請(qǐng)求和響應(yīng)的文章就介紹到這了,更多相關(guān)Spring Boot XML請(qǐng)求和響應(yīng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java 如何從字符串里面提取時(shí)間

    java 如何從字符串里面提取時(shí)間

    這篇文章主要介紹了java實(shí)現(xiàn)從字符串里面提取時(shí)間的方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 詳解java JDK 動(dòng)態(tài)代理類分析(java.lang.reflect.Proxy)

    詳解java JDK 動(dòng)態(tài)代理類分析(java.lang.reflect.Proxy)

    這篇文章主要介紹了詳解java JDK 動(dòng)態(tài)代理類分析(java.lang.reflect.Proxy)的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • SpringBoot如何整合Springsecurity實(shí)現(xiàn)數(shù)據(jù)庫(kù)登錄及權(quán)限控制

    SpringBoot如何整合Springsecurity實(shí)現(xiàn)數(shù)據(jù)庫(kù)登錄及權(quán)限控制

    這篇文章主要給大家介紹了關(guān)于SpringBoot如何整合Springsecurity實(shí)現(xiàn)數(shù)據(jù)庫(kù)登錄及權(quán)限控制的相關(guān)資料,文中通過(guò)圖文以及實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-01-01
  • ElasticSearch之索引模板滾動(dòng)索引實(shí)現(xiàn)詳解

    ElasticSearch之索引模板滾動(dòng)索引實(shí)現(xiàn)詳解

    這篇文章主要為大家介紹了ElasticSearch之索引模板滾動(dòng)索引實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • JDK動(dòng)態(tài)代理接口和接口實(shí)現(xiàn)類深入詳解

    JDK動(dòng)態(tài)代理接口和接口實(shí)現(xiàn)類深入詳解

    這篇文章主要介紹了JDK動(dòng)態(tài)代理接口和接口實(shí)現(xiàn)類,JDK動(dòng)態(tài)代理是代理模式的一種實(shí)現(xiàn)方式,因?yàn)樗腔诮涌趤?lái)做代理的,所以也常被稱為接口代理,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • Spring的注解配置與XML配置之間的比較

    Spring的注解配置與XML配置之間的比較

    在很多情況下,注釋配置比 XML 配置更受歡迎,注釋配置有進(jìn)一步流行的趨勢(shì)。Spring 2.5 的一大增強(qiáng)就是引入了很多注釋類,現(xiàn)在您已經(jīng)可以使用注釋配置完成大部分 XML 配置的功能
    2013-09-09
  • feign遠(yuǎn)程調(diào)用無(wú)法傳遞對(duì)象屬性405的問(wèn)題

    feign遠(yuǎn)程調(diào)用無(wú)法傳遞對(duì)象屬性405的問(wèn)題

    這篇文章主要介紹了feign遠(yuǎn)程調(diào)用無(wú)法傳遞對(duì)象屬性405的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java servlet 使用 PrintWriter 時(shí)的編碼與亂碼的示例代碼

    Java servlet 使用 PrintWriter 時(shí)的編碼與亂碼的示例代碼

    本篇文章主要介紹了Java servlet 使用 PrintWriter 時(shí)的編碼與亂碼的示例代碼,探討了 PrintWriter 的缺省編碼與普通字符流的缺省編碼的差異,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-11-11
  • 一文秒懂Java enum常見(jiàn)的用法講解

    一文秒懂Java enum常見(jiàn)的用法講解

    這篇文章主要介紹了一文秒懂Java enum常見(jiàn)的用法講解,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Java程序中方法的用法重載和遞歸

    Java程序中方法的用法重載和遞歸

    Java語(yǔ)言中的“方法”在其他語(yǔ)言當(dāng)中也可能被稱為“函數(shù)”(Function)。對(duì)于一些復(fù)雜的代碼邏輯,如果希望重復(fù)使用這些代碼,并且做到“隨時(shí)任意使用”,那么就可以將這些代碼放在一個(gè)大括號(hào)“{}”當(dāng)中,并且起一個(gè)名字。使用代碼的時(shí)候,直接找到名字調(diào)用即可
    2021-10-10

最新評(píng)論