自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

不知道這些不要說玩轉(zhuǎn)了Controller接口

開發(fā) 前端
在Spring Boot中,Controller接口是用于處理HTTP請求并返回響應(yīng)的重要組件。對于Controller中映射的接口,Spring提供了多種匹配方式,以便開發(fā)者能夠更靈活、更精確地定義請求與處理器方法之間的對應(yīng)關(guān)系。

環(huán)境:SpringBoot3.2.5

1. 簡介

在Spring Boot中,Controller接口是用于處理HTTP請求并返回響應(yīng)的重要組件。對于Controller中映射的接口,Spring提供了多種匹配方式,以便開發(fā)者能夠更靈活、更精確地定義請求與處理器方法之間的對應(yīng)關(guān)系。

在平時(shí)的開發(fā)中,定義的接口路徑通常會(huì)遵循RESTful API設(shè)計(jì)原則,并且會(huì)盡量保持清晰、簡潔和具有描述性。接口路徑可能會(huì)根據(jù)業(yè)務(wù)需求和資源模型進(jìn)行組織,但一般都具有以下特點(diǎn):

  1. 使用名詞表示資源,如/users、/products。
  2. 使用HTTP方法(GET、POST、PUT、DELETE等)來表示對資源的操作。
  3. 對于資源的子集或特定實(shí)例,使用路徑參數(shù),如/users/{userId}。
  4. 在需要時(shí),使用查詢參數(shù)來過濾或排序結(jié)果,如/users?name=John&sort=asc。

這樣的接口路徑設(shè)計(jì)有助于保持API的一致性和可讀性,同時(shí)也方便前端開發(fā)者理解和使用。并且這種RESTful API接口返回值通常都是JSON格式,雖然JSON格式因其輕量級和易讀性而廣泛流行,但實(shí)際項(xiàng)目開發(fā)中確實(shí)可能出現(xiàn)對返回值格式的不同需求。這些需求可能包括返回JSON、XML,或者根據(jù)特定的業(yè)務(wù)場景需要自定義的數(shù)據(jù)格式。針對這種場景需求SpringMVC為我們提供默認(rèn)提供了支持,如:JSON,XML,自定義格式,接下來將詳細(xì)介紹如何一個(gè)接口支持不同的返回?cái)?shù)據(jù)格式。

2. 實(shí)戰(zhàn)案例

你需要一個(gè)接口支持不同格式的輸出,我們可以通過以下3中方式來定義不同的輸出格式。為了支持XML格式,我們需要引入下面依賴

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

2.1 請求Header

這種方式是官方推薦的方式,根據(jù)請求的Accept header來指定你希望接收的數(shù)據(jù)格式

@RestController
@RequestMapping("/returnformat")
public class RetrunFormatController {
  
  @GetMapping("")
  public User format() {
    User user = new User(666L, "張三") ;
    return user ; 
  }
}

通過postman指定請求的header Accept

圖片圖片

指定返回XML格式

圖片圖片

2.2 通過請求參數(shù)

要想SpringMVC支持請求參數(shù)方式設(shè)置接收的數(shù)據(jù)格式,首先需要開啟此功能

spring:
  mvc:
    contentnegotiation:
      favor-parameter: true

通過上面開啟后我們就可以在請求參數(shù)中添加format參數(shù)即可,默認(rèn)只支持json和xml兩種格式:

圖片圖片

指定返回XML格式

圖片圖片

請求的參數(shù)名默認(rèn)是format,我們還可以通過如下配置修改參數(shù)名

spring:
  mvc:
    contentnegotiation:
      favor-parameter: true
      parameter-name: fmt

圖片圖片

2.3 通過路徑后綴

該種方式已經(jīng)不推薦使用了。從5.3開始,默認(rèn)情況下,SpringMVC不再執(zhí)行.*后綴模式匹配,其中映射到/person的控制器也隱式映射到/perse.*。因此,路徑擴(kuò)展不再用于解釋響應(yīng)的請求內(nèi)容類型?—?例如/person.pdf、/person.xml等。要使用基于后綴的方式,在不同的版本中開啟此功能的方式不一樣,在5.3(包括)之前版本可以直接通過配置設(shè)置,從6.0開始只能通過自定義WebMvcConfigurer配置。

5.3之前版本

spring:
  mvc:
    contentnegotiation:
      favor-path-extension: true

6.0版本

@Configuration
public class FavorPathConfigurer implements WebMvcConfigurer {


  @Override
  public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
    configurer.favorPathExtension(true) ;
  }
}

Controller接口定義

@RestController
@RequestMapping("/favors")
public class FavorPathController {
  
  @GetMapping("/p.*")
  public User favor() {
    return new User(1L, "張三") ;
  }
}

分別指定不同的請求后綴

圖片圖片

圖片圖片

2.4 自定義格式

在Spring Boot環(huán)境下自定義消息格式非常的簡單,你執(zhí)行實(shí)現(xiàn)HttpMessageConverter接口即可。如下示例,自定義返回yaml格式的數(shù)據(jù)

public class YamlHttpMessageConverter implements HttpMessageConverter<Object> {
  @Override
  public boolean canWrite(Class<?> clazz, MediaType mediaType) {
    // 這里為了簡單只做類型判斷,你應(yīng)該對MediaType做判斷,否則其它格式將無法正確輸出
    return User.class.isAssignableFrom(clazz)
  }
  @Override
  public List<MediaType> getSupportedMediaTypes() {
    return List.of(new MediaType("application", "yaml")) ;
  }
  @Override
  public void write(Object t, MediaType contentType, HttpOutputMessage outputMessage)
      throws IOException, HttpMessageNotWritableException {
    StreamUtils.copy(new org.yaml.snakeyaml.Yaml().dump(t), StandardCharsets.UTF_8, outputMessage.getBody()) ;
  }
}

配置文件中定義你自定義的格式

spring:
  mvc:
    contentnegotiation:
      media-types:
        yaml: application/yaml

以上就完成了自定義格式輸出的所有準(zhǔn)備,測試結(jié)果

圖片圖片

輸出yaml格式數(shù)據(jù)。你可以將輸出的數(shù)據(jù)在通過Yaml類進(jìn)行還原為User對象。

責(zé)任編輯:武曉燕 來源: Spring全家桶實(shí)戰(zhàn)案例源碼
相關(guān)推薦

2023-09-08 08:23:29

Servlet程序MVC

2022-05-05 12:02:45

SCSS函數(shù)開發(fā)

2020-03-05 11:10:18

Left join數(shù)據(jù)庫MySQL

2018-09-02 15:43:56

Python代碼編程語言

2020-07-29 09:53:09

VSCode編碼工具插件

2014-12-08 10:39:15

2021-08-10 10:25:16

HTML 網(wǎng)絡(luò)開發(fā)前端開

2017-12-19 23:12:53

2021-02-03 08:24:32

JavaScript技巧經(jīng)驗(yàn)

2015-07-13 08:49:54

2020-10-28 08:06:09

Vue3框架數(shù)據(jù)

2020-06-12 09:20:33

前端Blob字符串

2020-07-28 08:26:34

WebSocket瀏覽器

2021-10-19 14:49:49

CSS前端

2022-01-04 07:30:24

IT熱門技術(shù)

2011-09-15 17:10:41

2022-10-13 11:48:37

Web共享機(jī)制操作系統(tǒng)

2009-12-10 09:37:43

2021-02-01 23:23:39

FiddlerCharlesWeb

2020-12-21 09:00:04

MySQL緩存SQL
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)