創建restful應用相關操作

創建restful應用

步驟:

1:建立要操作的bean,並生成getter,setter

2: 建立對bean的CURD操作service類完成操作及存儲

3: 建立@RestController修飾的apiController,RequestMapping定義的接口需要是rest風格

@RequestMapping(value = "/users", method = RequestMethod.GET)

@RequestMapping(value = "/users", method = RequestMethod.POST)

@RequestMapping(value = "/user/{email}", method = RequestMethod.PUT)

@RequestMapping(value = "/user/{email}", method = RequestMethod.DELETE)

 

 

說明:

默認情況下, Spring 會略去URL點號後面的內容,解決方案是在配置文件中添加配置

configurer.setUseRegisteredSuffixPatternMatch(true);

如下:

@Override

public void configurePathMatch(PathMatchConfigurer configurer) {

configurer.setUseRegisteredSuffixPatternMatch(true);

}

默認情況下,Spring Boot 所使用的 JSON 序列化庫 Jackson 會將所有能夠通過 getter 方法訪問的內容都進行序列化。 可以在類 級別使用@JsonIgnoreProperties 註解,定義想要忽略的一組屬性,也可以在想要忽略的屬性所對應的 getter 方法上,添加@JsonIgnore 註解。

如果不是我們自己的類我們並沒有辦法爲其添加註解。 直接序列化模型類通常來講並不是好的方案,它會將你的模型類與序列化庫關聯在一 起,所使用的序列化庫是具體的實現細節,所以不應該將其與模型進行關聯。

當處理不可修改的代碼時,Jackson 提供了兩個方案:

¿ 創建專門用於序列化功能的新類;

¿ 使用混入(mixin),這是與模型相關聯的簡單類。它們會在你自己的代碼中聲明,

能夠使用任意的 Jackson 註解。

因爲我們只是對模型類中的域進行簡單的轉換(一些會隱藏,還有個別的要重命名),

我們可以選擇混入的方案。

這是一種很好的非侵入式的方式,可以通過簡單的類或接口在運行時重命名或排除相

關的域。

另外一種指定域子集的方式就是使用@JsonView 註解,這樣這些域的子集就可以用到

應用程序的其他地方了。我推薦你閱讀這篇很棒的 博客文章:https://spring.io/blog/2014/12/02/latest-jackson-integration-improvements-in-spring

 

返回值中包含狀態碼與異常處理

步驟:

1:api接口的返回值必須是ResponseEntity<>類型

2:在代碼中返回相對應的錯誤信息

return new ResponseEntity<>(HttpStatus.NOT_FOUND);

if (!userRepository.exists(user.getEmail())) {
    status = HttpStatus.CREATED;
}
User saved = userRepository.save(user);
return new ResponseEntity<>(saved, status);

 

說明:

 

使用異常處理狀態碼

步驟

1:定義對應的自定義異常

2:api接口的返回值必須是ResponseEntity<>類型

3:bean操作中發現相對應的錯誤或者異常,並逐層向上拋出異常

4:建立使用@ControllerAdvice標註的異常處理類,處理對應的異常信息,注意以下處理的異常和對應的錯誤提示註解

@ExceptionHandler(EntityNotFoundException.class)

@ResponseStatus(value = HttpStatus.NOT_FOUND, reason = "Entity

could not be found")

說明

通過爲 bean 添加@ControllerAdvice 註解,我們能夠爲一組控制器添加額外的行爲。這

些控制器通知可以用來處理異常,也可以通過@ModelAttribute 來聲明模型屬性,或通過

@InitBinder 聲明校驗策略。

藉助剛剛編寫的代碼,我們就能處理控制器拋出的所有 EntityNotFoundException 異常,

並將其與 404 狀態進行關聯。我們可以抽象這種理念並確保應用的所有控制器按照一致的

方式來進行處理。

在當前的級別下,我們還沒有在 API 處理中處理超鏈接。我建議你去了解一下 Spring

HATEOAS Spring Data REST,它們提供了非常優雅的方案,能夠讓你的資源更容易被發現。

 

 

 

利用swagger實現文檔化

步驟:

1:添加依賴

compile 'io.springfox:springfox-swagger2:2.1.2'

compile 'io.springfox:springfox-swagger-ui:2.1.2'

2:在配置文件添加支持註解

@EnableSwagger2

3:訪問文檔地址:http://localhost:8080/swagger-ui.html

說明

compile 'io.springfox:springfox-swagger2:2.1.2'

compile 'io.springfox:springfox-swagger-ui:2.1.2'

第一項依賴提供了一個註解,藉助它能夠在我們的應用中啓用 Swagger 功能,它還提

供了一個 API,用來通過註解描述資源。Swagger 會生成 API JSON 格式表述。

第二項依賴是一個 WebJar,其中包含了靜態資源,這些資源會以 Web 客戶端的形式使

用前面所生成的 JSON

 

在我們的場景下,我們只想暴露這一個 API

@Bean

public Docket userApi() {

return new Docket(DocumentationType.SWAGGER_2)

.select()

.paths(path -> path.startsWith("/api/"))

.build();

}

Springfox 會與一組 Docket 協同工作,這些 Docket 需要在配置類中定義爲 bean。它們

RESTful 資源的邏輯分組,一個應用可以包含很多組。

讀者可以參考它的文檔(http://springfox.github.io/springfox)來了解所有不同的設置方式。

 

生成XML報文

步驟:

1:添加jar包依賴

compile 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml'

2:在postMan中報文頭添加Accept,用來分別支持json和xml

Accept:application/json

Accept:application/xml

 

說明:

默認情況下,將會按照應用所定義的內容協商策略解析正確的內容。你可以看一下 ContentNegotiationManagerFactoryBean 類,瞭解這些策略在 Spring MVC中是如何運用的。

內容類型可以通過如下的策略來進行解析:

按照客戶端發送的 Accept 頭信息;

藉助類似於“?format=json”這樣的參數;

藉助路徑擴展名,如“/myResource.json”或“/myResource.xml”。

你可以在 Spring 配置中自定義這些策略,這需要重寫 WebMvcConfigurerAdapter 類的 configureContentNegotiation()方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章