日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

具有中央异常处理和VO验证的Spring Data JPA –框架

發布時間:2023/12/3 javascript 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 具有中央异常处理和VO验证的Spring Data JPA –框架 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.簡介

一段時間以來,Spring框架已成為事實上的標準,可以創建任何基于REST API的應用程序。 Spring提供了各種現成的組件,以避免編寫重復而繁瑣的樣板代碼。 另外,關于Spring的美麗之處在于,如果有現成的解決方案,它就可以解決。 它為您提供了與現有庫/框架集成的簡便方法。 在本文中,讓我們看看如何使用全棧Spring技術編寫基于Spring的RESTful API。 Spring Boot,Spring Validations和Spring數據JPA的示例顯示了以下方面的完整信息:

  • Spring Boot及其配置
  • 使用Spring Boot Starters進行依賴管理
  • 使用Spring數據JPA避免瓶頸DAO代碼。
  • Spring支持VO級別的驗證。
  • 集中式異常處理。

我們使用Gradle進行依賴管理并作為構建工具。 讓我們逐步進行。

2.生成項目

這是生成項目所需遵循的步驟。

2.1 Spring Intializer

Spring在此位置Spring INITIALIZR提供了易于啟動的項目生成工具。 在此網頁上,您可以通過添加所需的依賴項來引導應用程序。 您可以通過添加下面提到的3個依賴項來生成項目框架(請參見下圖以清楚了解)。
1.'Web':此依賴關系是編碼Web層和創建API所必需的。 生成項目后,它在build.gralde文件中顯示為以下依賴項。
compile('org.springframework.boot:spring-boot-starter-web') 2.'Validation':啟用彈簧驗證。 它在build.gradle中顯示為以下依賴項。 compile('org.springframework.boot:spring-boot-starter-validation') 3.'JPA':啟用彈簧數據JPA。 它在build.gradle中顯示為以下依賴項。 compile('org.springframework.boot:spring-boot-starter-data-jpa')

彈簧初始化器

2.2 Eclipse配置

生成項目并將其導入到Eclipse中。 完成此操作后,就可以創建API。 在eclipse中導入的項目應如下所示。

項目結構

3.創建API

在編寫API之前,讓我們根據Java約定創建包,如下所示。

Java包

使用生成的代碼,我們在根包中獲得一個類,即com.example.spring.springrestapp。 這是我們的啟動類。

入門班

注意:應該使用默認配置在根軟件包級別創建啟動類。
現在,讓我們繼續創建控制器類和API方法,以向數據庫添加用戶詳細信息。 對于我們將要構建的該API,讓我們假設一些約束作為我們的要求:

  • 該API應該收集用戶的名字,姓氏,電子郵件,地址和電話號碼并將其存儲在MySQL DB中
  • API調用者將姓,名和電子郵件作為必填字段傳遞。 電子郵件應經過格式驗證。
  • 家庭住址和電話號碼可以是可選的。

4.配置數據庫詳細信息:

對于此項目,您需要運行MySQL DB的本地實例。 您可以在application.properties中提供數據庫詳細信息,如下所示。

應用特性

spring.datasource.url = jdbc:mysql://localhost:3306/boot_app spring.datasource.username = root spring.datasource.password = root

在MySQL DB中,使用以下腳本在MySQL DB中創建一個包含名字,姓氏,電子郵件,地址和電話號碼的表。

創建表腳本

create table user_info( user_id smallint(10) primary key auto_increment, first_name varchar(150), last_name varchar(150), email varchar(200), address varchar(250), phone smallint(10) );

5.配置Spring Data JPA

表準備好后,我們需要使用JPA將其映射為Java對象。 該表的每個字段都使用注釋映射到java對象中。 以下是我們實體的外觀。

JPA實體

package com.example.spring.springrestapp.dao.entity;import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Table; import javax.validation.constraints.Email; import javax.validation.constraints.NotBlank;import org.springframework.data.annotation.Id;@Entity @Table(name = "user_info") public class UserInformation {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)@Column(name = "USER_ID")private Integer userId;@Column(name = "FIRST_NAME")private String firstName;@Column(name = "LAST_NAME")private String lastName;@Column(name = "EMAIL")private String email;@Column(name = "ADDRESS")private String address;@Column(name = "PHONE")private Integer phone;public String getFirstName() {return firstName;}public void setFirstName(String firstName) {this.firstName = firstName;}public String getLastName() {return lastName;}public void setLastName(String lastName) {this.lastName = lastName;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public Integer getPhone() {return phone;}public void setPhone(Integer phone) {this.phone = phone;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;} }

現在,創建Spring數據JPA存儲庫。 可以通過如下擴展接口JpaRepository來創建數據JPA存儲庫。 (請注意,您需要傳遞ID字段的實體和數據類型。在我的示例中,entity是User,而id字段的類型是Integer)

JPA存放區

package com.example.spring.springrestapp.dao.repo;import org.springframework.data.jpa.repository.JpaRepository; import com.example.spring.springrestapp.dao.entity.UserInformation; public interface UserRepo extends JpaRepository {}

如此簡單,我們的DAO代碼已準備就緒! Spring負責生成基礎的DAO實現。

6.服務和控制器層

現在,我們創建一個服務類來保存用戶詳細信息。 您可以根據需要在方法中添加業務邏輯。

服務等級

@Service public class UserDetailService {@Autowiredprivate UserRepo userRepo;public UserInformation saveUser(UserInformation user) {return userRepo.save(user);} }

現在讓我們創建一個控制器和API方法。 saveUser api在請求正文中接受json數據,然后在正文中以JSON形式返回響應。

控制器層

@RestController @RequestMapping("/api/user") public class SpringRestAppController {@Autowiredprivate UserDetailService userService;@PostMapping(value = "/save")public @ResponseBody UserInformation createUser(@RequestBody UserInformation user) {return userService.saveUser(user);} }

@RequestMapping用于映射資源。
@PostMapping與分配給@RequestMapping HttpPost相同。

7.配置VO級別驗證

我們的API需要按照開頭提到的要求對其收到的數據進行驗證。 為此,我們將在實體級別應用數據驗證,如下所示。

數據驗證

@Entity @Table(name = "user_info") public class UserInformation {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)@Column(name = "USER_ID")private Integer userId;@Column(name = "FIRST_NAME")@NotBlank(message = "first name can't be blank")private String firstName;@Column(name = "LAST_NAME")@NotBlank(message = "last name can't be blank")private String lastName;@Column(name = "EMAIL")@NotBlank(message = "email can't be blank")@Email(message = "invalid format")private String email;@Column(name = "ADDRESS")private String address;@Column(name = "PHONE")private Integer phone;

請注意,注釋@NotBlank不允許為空或null值, @Email不能檢查有效的電子郵件格式。 此外,我們添加了驗證失敗的消息。

現在,我們需要告訴Spring按照實體中指定的注釋進行驗證。 為此,我們可以在請求有效負載上使用@Valid注釋,如下所示。

@PostMapping(value = "/save")public @ResponseBody User createUser(@RequestBody @Valid UserInformation user) {return userService.saveUser(user);}

8.配置異常處理

驗證失敗時,我們需要將正確格式的錯誤響應提供給API使用方。 例如,如果沒有給出名字,我想以以下格式返回錯誤消息,并帶有HTTP錯誤代碼錯誤請求。 為API使用者提供異常堆棧跟蹤不是一個好主意。

{ "errorCode": "VALIDATION_FAILED", "message": "" }

我們可以在每個API控制器方法中執行此操作,也可以創建單個全局異常處理,從而避免出于相同需求在多個位置編寫重復代碼。
為了在一個地方處理中央異常,我們利用了Spring的錯誤處理程序。 在Spring 3.2中,提供了@ControllerAdvice以全球化異常/錯誤處理。 要返回錯誤響應,請創建一個具有錯誤代碼和消息的VO。

值對象中的錯誤處理

@JsonInclude(content = Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) public class ApiErrorVO {private String errorCode;private String message;public ApiErrorVO(String errorCode, String message) {super();this.errorCode = errorCode;this.message = message;}

當驗證失敗時,Spring會拋出MethodArgumentNotValidException 。 我們可以捕獲此異常并從拋出的異常中提取錯誤消息。 我們使用@ExceptionHandler捕獲異常,如下所示。

異常處理

@ControllerAdvice public class ApiExceptionHandler {@ExceptionHandler(MethodArgumentNotValidException.class)@ResponseStatus(code = HttpStatus.BAD_REQUEST)@ResponseBodypublic ApiErrorVO handleValidationError(MethodArgumentNotValidException ex) {BindingResult bindingResult = ex.getBindingResult();FieldError fieldError = bindingResult.getFieldError();String defaultMessage = fieldError.getDefaultMessage();return new ApiErrorVO("VALIDATION_FAILED", defaultMessage);} }

@ResponseStatus用于指定HTTP錯誤的請求狀態。
@ResponseBody確保將錯誤寫入響應正文。

9.結論

現在讓我們測試一下API。

情況1:驗證失敗
網址: http://localhost:8080/restApp/api/user/save
RequestPayload:請注意空白的名字

{ "firstName":"", "lastName":"K", "email":"alexk@abc.com" }

響應:HTTP狀態為400

{ "errorCode": "VALIDATION_FAILED", "message": "first name can't be blank" }

情況2:提供所有必需值時
請求有效負載:

{ "firstName":"Alex", "lastName":"K", "email":"alexk@abc.com" }

響應:HTTP狀態為200

{ "userId": 8, "firstName": "Alex", "lastName": "K", "email": "alexk@abc.com", "address": null, "phoneNumber": null }

測試結束。

10.下載源代碼

下載
您可以在此處下載完整的源代碼: SPRING DATA JPA

翻譯自: https://www.javacodegeeks.com/2018/08/spring-data-jpa-central-exception-handling-vo-validations-framework.html

總結

以上是生活随笔為你收集整理的具有中央异常处理和VO验证的Spring Data JPA –框架的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。