1. 程式人生 > >Spring Boot中如何擴充套件XML請求和響應的支援

Spring Boot中如何擴充套件XML請求和響應的支援

開發十年,就只剩下這套架構體系了! >>>   

在之前的所有Spring Boot教程中,我們都只提到和用到了針對HTML和JSON格式的請求與響應處理。那麼對於XML格式的請求要如何快速的在Controller中包裝成物件,以及如何以XML的格式返回一個物件呢?

實現原理:訊息轉換器(Message Converter)

在擴充套件上述問題之前,我們先要知道Spring Boot中處理HTTP請求的實現是採用的Spring MVC。而在Spring MVC中有一個訊息轉換器這個概念,它主要負責處理各種不同格式的請求資料進行處理,幷包轉換成物件,以提供更好的程式設計體驗。

在Spring MVC中定義了HttpMessageConverter介面,抽象了訊息轉換器對型別的判斷、對讀寫的判斷與操作,具體可見如下定義:

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;

}

眾所周知,HTTP請求的Content-Type有各種不同格式定義,如果要支援Xml格式的訊息轉換,就必須要使用對應的轉換器。Spring MVC中預設已經有一套採用Jackson實現的轉換器MappingJackson2XmlHttpMessageConverter

擴充套件實現

第一步:引入Xml訊息轉換器

在傳統Spring應用中,我們可以通過如下配置加入對Xml格式資料的訊息轉換實現:

@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應用不用像上面這麼麻煩,只需要加入jackson-dataformat-xml依賴,Spring Boot就會自動引入MappingJackson2XmlHttpMessageConverter的實現:

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

同時,為了配置Xml資料與維護物件屬性的關係所要使用的註解也在上述依賴中,所以這個依賴也是必須的。

第二步:定義物件與Xml的關係

做好了基礎擴充套件之後,下面就可以定義Xml內容對應的Java物件了,比如:

@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簡化程式碼的註解,主要用於生成get、set以及建構函式。@JacksonXmlRootElement@JacksonXmlProperty註解是用來維護物件屬性在xml中的對應關係。

上述配置的User物件,其可以對映的Xml樣例如下(後續可以使用上述xml來請求介面):

<User>
	<name>aaaa</name>
	<age>10</age>
</User>

第三步:建立接收xml請求的介面

完成了要轉換的物件之後,可以編寫一個介面來接收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("didispace.com : " + user.getName());
        user.setAge(user.getAge() + 100);
        return user;
    }

}

最後,啟動Spring Boot應用,通過POSTMAN等請求工具,嘗試一下這個介面,可以看到請求Xml,並且返回了經過處理後的Xml內容。

相關推薦

Spring Boot擴充套件XML請求響應支援

在Spring Boot中,我們大多時候都只提到和用到了針對HTML和JSON格式的請求與響應處理。那麼對於XML格式的請求要如何快速的在Controller中包裝成物件,以及如何以XML的格式返回一個物件呢? 實現原理:訊息轉換器(Message Converter) 在擴充套件上述問題之前,我們先要知

Spring Boot擴充套件XML請求響應實戰

一 點睛 對於XML格式的請求要如何快速的在Controller中包裝成物件,以及如何以XML的格式返回一個物件,被篇將討論這一方面的主題。 二 訊息轉換器 Spring Boot中處理HTTP請求的實現是採用的Spring MVC。而在Spring MVC中有一個訊息

Spring Boot如何擴充套件XML請求響應支援

開發十年,就只剩下這套架構體系了! >>>   

Spring Boot 修改端口上下文路徑

inf png 中修改 div server 效果圖 span web-inf 分享   通過修改application.properties內容來改變訪問的端口號和上下文路徑(很簡單!) spring.mvc.view.prefix=/WEB-INF/jsp/ sp

Spring boot pom.xml 各個節點詳解

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.

.net core 雜記:WebAPI的XML請求響應

一般情況下,restfult api  進行資料返回或模型繫結,預設json格式會比較常見和方便,當然偶爾也會需要以XML格式的要求 對於返回XML,普通常見的方式就是在每個aciton方法進行諸如XmlFormatter此類的序列化處理, 而對於接收XML,則是進行一些額外的XML解析操作或反

Spring Boot如何擴充套件XML格式請求響應支援

在Spring Boot中,對於XML格式的請求要如何快速的在Controller中包裝成物件,以及如何再以XML的格式返回一個物件呢? 實現原理:訊息轉換器(Message Converter) 在擴充套件上述問題之前,我們先要知道Spring Boot中處理HTTP請求的實現是採用的Sp

ideaspring boot maven專案的依賴pom.xml檔案不一致的解決辦法

今天用idea建立了一個spring boot專案,包含了spring security,在pom檔案和專案依賴都存在security依賴的情況下,對專案的訪問連結都會跳轉到輸入賬號密碼的驗證登入頁面,程式碼和跳轉如下:   為了驗證security的

spring boot實現響應圖片的方法以及改進

spring-bootController響應,噴出圖片,是一個很常見的功能,代碼如下@RequestMapping(value = { "/img/{filename:.+}" }, method = RequestMethod.GET, produces = { MediaType.I

Thymeleaf 模板 在spring boot 的引用應用

end text www. bean template har ica ngs sta Thymeleaf是一個java類庫,他是一個xml/xhtml/html5的模板引擎和Struts框架的freemarker模板類似,可以作為mvc的web應用的view層。 Thy

spring boot 導入xml配置文件所需註解禁用自動配置類的註解

gpo exclude col 開始 XML post 正在 pri ann 導入XML配置 如果您絕對必須使用基於XML的配置,我們建議您仍然從一個@Configuration類開始。然後您可以使用@ImportResource註釋來加載XML配置文件。

Spring Bootapplication.propertiesapplication.yml文件

undefined fan href 目錄 分享圖片 boot 分享 ref 列表 application.properties和application.yml文件可以放在一下四個位置: 外置,在相對於應用程序運行目錄的/congfig子目錄裏。 外置,在應用程序運行的目

HTTP請求響應淺析

cati odi 客戶端 9.png bubuko 連接 str tps size HTTP中的請求 HTTP中請求由三部分組成: HTTP中請求行:請求行分為三部分(請求方法+請求地址+協議和版本)例: POST/GET https://www.baidu.com/

Spring boot 配置 mybatis xml動態SQL

star too conn -- 動態 div nec output out 1.pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="

由nginxspring boottomcat配置不當引起的問題

最近接淺橙貸超Api推過來的流量,由於有幾個請求頭的body體積比較大,最大有30M,到我們這邊nginx的error日誌就報錯了: 2018/11/19 22:33:52 [error] 9791#0: *639124 readv() failed (104: Connection reset by

Spring Boot的return new ModelAndView("xxx") return "xxx"的區別

1. return new modelAndView("XXX") 是包括檢視和資料的,   而return "XXX" 只是檢視,他會根據你配置檔案裡試圖解析器的配置,幫你匹配好字首,字尾然後跳轉到XXX這個頁面。   比如 return "index",你配置檔案裡的字首是“

基於代理的spring aop,使用xml實現通知引入

ProxyFactoryBean xml配置中,實現代理工廠的類 屬性 定義 target 代理的目標物件 proxyInterfaces 代理需要實現的

Spring Boot 使用 Spring AOP AspectJ 來測量方法的執行時間

原文連結:https://dzone.com/articles/logging-average-method-execution-times-via-aspectj 作者:Murat Derman 譯者:Darren Luo 想要了解更多有關測量方法執行時間的資訊?檢視本教

spring boot通過自定義註解AOP攔截指定的請求

本文主要通過切面類和自定註解的方式,攔截指定的介面(程式碼中已經作了詳細的說明) 目錄 一 準備工作 三 切面類 五 測試結果  一 準備工作 1.1 新增依賴 通過spr

Spring Boot使用log4j實現http請求日誌入mongodb

一 問題提出 當我們在叢集中部署應用之後,應用請求的日誌被分散記錄在了不同應用伺服器的檔案系統上,這樣分散的儲存並不利於我們對日誌內容的檢索。解決日誌分散問題的方案多種多樣,本篇的解決方案是:擴充套件log4j實現將日誌寫入MongoDB。 二 實戰  1 新建依賴