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中,我們大多時候都只提到和用到了針對HTML和JSON格式的請求與響應處理。那麼對於XML格式的請求要如何快速的在Controller中包裝成物件,以及如何以XML的格式返回一個物件呢?
實現原理:訊息轉換器(Message Converter)
在擴充套件上述問題之前,我們先要知
一 點睛
對於XML格式的請求要如何快速的在Controller中包裝成物件,以及如何以XML的格式返回一個物件,被篇將討論這一方面的主題。
二 訊息轉換器
Spring Boot中處理HTTP請求的實現是採用的Spring MVC。而在Spring MVC中有一個訊息
開發十年,就只剩下這套架構體系了!
>>>
inf png 中修改 div server 效果圖 span web-inf 分享
通過修改application.properties內容來改變訪問的端口號和上下文路徑(很簡單!)
spring.mvc.view.prefix=/WEB-INF/jsp/
sp
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache. 一般情況下,restfult api 進行資料返回或模型繫結,預設json格式會比較常見和方便,當然偶爾也會需要以XML格式的要求
對於返回XML,普通常見的方式就是在每個aciton方法進行諸如XmlFormatter此類的序列化處理,
而對於接收XML,則是進行一些額外的XML解析操作或反
在Spring Boot中,對於XML格式的請求要如何快速的在Controller中包裝成物件,以及如何再以XML的格式返回一個物件呢?
實現原理:訊息轉換器(Message Converter)
在擴充套件上述問題之前,我們先要知道Spring Boot中處理HTTP請求的實現是採用的Sp
今天用idea建立了一個spring boot專案,包含了spring security,在pom檔案和專案依賴都存在security依賴的情況下,對專案的訪問連結都會跳轉到輸入賬號密碼的驗證登入頁面,程式碼和跳轉如下:
為了驗證security的 spring-bootController響應,噴出圖片,是一個很常見的功能,代碼如下@RequestMapping(value = { "/img/{filename:.+}" }, method = RequestMethod.GET, produces = { MediaType.I end text www. bean template har ica ngs sta Thymeleaf是一個java類庫,他是一個xml/xhtml/html5的模板引擎和Struts框架的freemarker模板類似,可以作為mvc的web應用的view層。
Thy gpo exclude col 開始 XML post 正在 pri ann
導入XML配置
如果您絕對必須使用基於XML的配置,我們建議您仍然從一個@Configuration類開始。然後您可以使用@ImportResource註釋來加載XML配置文件。
undefined fan href 目錄 分享圖片 boot 分享 ref 列表 application.properties和application.yml文件可以放在一下四個位置:
外置,在相對於應用程序運行目錄的/congfig子目錄裏。
外置,在應用程序運行的目 cati odi 客戶端 9.png bubuko 連接 str tps size HTTP中的請求
HTTP中請求由三部分組成:
HTTP中請求行:請求行分為三部分(請求方法+請求地址+協議和版本)例:
POST/GET https://www.baidu.com/ star too conn -- 動態 div nec output out 1.pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns=" 最近接淺橙貸超Api推過來的流量,由於有幾個請求頭的body體積比較大,最大有30M,到我們這邊nginx的error日誌就報錯了:
2018/11/19 22:33:52 [error] 9791#0: *639124 readv() failed (104: Connection reset by
1. return new modelAndView("XXX") 是包括檢視和資料的, 而return "XXX" 只是檢視,他會根據你配置檔案裡試圖解析器的配置,幫你匹配好字首,字尾然後跳轉到XXX這個頁面。 比如 return "index",你配置檔案裡的字首是“
ProxyFactoryBean
xml配置中,實現代理工廠的類
屬性
定義
target
代理的目標物件
proxyInterfaces
代理需要實現的
原文連結:https://dzone.com/articles/logging-average-method-execution-times-via-aspectj
作者:Murat Derman
譯者:Darren Luo
想要了解更多有關測量方法執行時間的資訊?檢視本教
本文主要通過切面類和自定註解的方式,攔截指定的介面(程式碼中已經作了詳細的說明)
目錄
一 準備工作
三 切面類
五 測試結果
一 準備工作
1.1 新增依賴
通過spr
一 問題提出
當我們在叢集中部署應用之後,應用請求的日誌被分散記錄在了不同應用伺服器的檔案系統上,這樣分散的儲存並不利於我們對日誌內容的檢索。解決日誌分散問題的方案多種多樣,本篇的解決方案是:擴充套件log4j實現將日誌寫入MongoDB。
二 實戰
1 新建依賴
相關推薦
Spring Boot中擴充套件XML請求和響應的支援
Spring Boot中擴充套件XML請求和響應實戰
Spring Boot中如何擴充套件XML請求和響應的支援
Spring Boot 中修改端口和上下文路徑
Spring boot 中pom.xml 各個節點詳解
.net core 雜記:WebAPI的XML請求和響應
Spring Boot中如何擴充套件對XML格式請求和響應的支援
idea中的spring boot maven專案的依賴和pom.xml檔案不一致的解決辦法
spring boot中實現響應圖片的方法以及改進
Thymeleaf 模板 在spring boot 中的引用和應用
spring boot 導入xml配置文件所需註解和禁用自動配置類的註解
Spring Boot中application.properties和application.yml文件
HTTP中請求和響應淺析
Spring boot 配置 mybatis xml和動態SQL
由nginx和spring boot中tomcat配置不當引起的問題
Spring Boot中的return new ModelAndView("xxx") 和 return "xxx"的區別
基於代理的spring aop中,使用xml實現通知和引入
在 Spring Boot 中使用 Spring AOP 和 AspectJ 來測量方法的執行時間
spring boot通過自定義註解和AOP攔截指定的請求
Spring Boot中使用log4j實現http請求日誌入mongodb