最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot如何使用@RequestBody進(jìn)行數(shù)據(jù)校驗(yàn)

 更新時(shí)間:2023年06月26日 09:22:07   作者:程序媛徐師姐  
在Web開發(fā)中,前臺(tái)向后臺(tái)發(fā)送數(shù)據(jù)是非常常見的場(chǎng)景,而在SpringBoot框架中,我們通常使用@RequestBody注解來接收前臺(tái)發(fā)送的?JSON數(shù)據(jù),并將其轉(zhuǎn)化為Java對(duì)象,本文將介紹如何在?SpringBoot?中使用?@RequestBody?進(jìn)行數(shù)據(jù)校驗(yàn)

SpringBoot 如何使用 @RequestBody 進(jìn)行數(shù)據(jù)校驗(yàn)

什么是 @RequestBody

@RequestBody 注解用于接收前臺(tái)發(fā)送的 JSON 數(shù)據(jù),并將其轉(zhuǎn)化為 Java 對(duì)象。它的作用是將 HTTP 請(qǐng)求正文中的 JSON 字符串綁定到相應(yīng)的 Java 對(duì)象上。在 SpringBoot 中,我們通常使用 @RequestBody 注解來接收前臺(tái)發(fā)送的 JSON 數(shù)據(jù),并將其轉(zhuǎn)化為 Java 對(duì)象。

如何使用 @RequestBody 進(jìn)行數(shù)據(jù)校驗(yàn)

在 SpringBoot 中,我們可以使用 JSR-303 規(guī)范提供的注解來對(duì) Java 對(duì)象進(jìn)行數(shù)據(jù)校驗(yàn)。JSR-303 是 Java EE 6 中引入的 Bean Validation 規(guī)范,它提供了一套用于數(shù)據(jù)校驗(yàn)的注解。

在 SpringBoot 中使用 JSR-303 注解進(jìn)行數(shù)據(jù)校驗(yàn)的步驟如下:

  1. 引入相關(guān)依賴

在 pom.xml 文件中添加以下依賴:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>
  • 在 Java Bean 中添加校驗(yàn)注解

在 Java Bean 中添加校驗(yàn)注解,例如:

public class User {
    @NotNull(message = "用戶名不能為空")
    private String username;
    @NotNull(message = "密碼不能為空")
    @Size(min = 6, message = "密碼長度不能小于 6 位")
    private String password;
    // 省略 getter 和 setter 方法
}
  • 在 Controller 方法中添加 @Validated 和 @RequestBody 注解

在 Controller 方法中添加 @Validated 和 @RequestBody 注解,例如:

@RestController
@RequestMapping("/user")
public class UserController {
    @PostMapping("/add")
    public Result addUser(@Validated @RequestBody User user) {
        // 處理添加用戶的邏輯
    }
}

在上述代碼中,@Validated 注解用于啟用數(shù)據(jù)校驗(yàn),@RequestBody 注解用于接收前臺(tái)發(fā)送的 JSON 數(shù)據(jù),并將其轉(zhuǎn)化為 User 對(duì)象。

  1. 處理校驗(yàn)結(jié)果

如果數(shù)據(jù)校驗(yàn)失敗,會(huì)拋出 MethodArgumentNotValidException 異常。我們可以在 ControllerAdvice 中捕獲此異常,并返回校驗(yàn)結(jié)果。

@RestControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public Result handleValidationException(MethodArgumentNotValidException e) {
        BindingResult bindingResult = e.getBindingResult();
        List<ObjectError> allErrors = bindingResult.getAllErrors();
        List<String> errorMessages = new ArrayList<>();
        for (ObjectError error : allErrors) {
            errorMessages.add(error.getDefaultMessage());
        }
        return Result.error(String.join(",", errorMessages));
    }
}

在上述代碼中,我們使用 @RestControllerAdvice 注解聲明一個(gè)全局異常處理類,其中 @ExceptionHandler 注解用于捕獲 MethodArgumentNotValidException 異常,并處理校驗(yàn)結(jié)果,最終返回一個(gè) Result 對(duì)象。

完整代碼示例

@Data
public class User {
    @NotNull(message = "用戶名不能為空")
    private String username;
    @NotNull(message = "密碼不能為空")
    @Size(min = 6, message = "密碼長度不能小于 6 位")
    private String password;
}
@RestController
@RequestMapping("/user")
public class UserController {
    @PostMapping("/add")
    public Result addUser(@Validated @RequestBody User user) {
        // 處理添加用戶的邏輯
    }
}
@RestControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public Result handleValidationException(MethodArgumentNotValidException e) {
        BindingResult bindingResult = e.getBindingResult();
        List<ObjectError> allErrors = bindingResult.getAllErrors();
        List<String> errorMessages = new ArrayList<>();
        for (ObjectError error : allErrors) {
            errorMessages.add(error.getDefaultMessage());
        }
        return Result.error以上示例代碼可能有些不完整,我們來完整展示一下如何使用 @RequestBody 進(jìn)行數(shù)據(jù)校驗(yàn)的完整代碼示例。
### 引入依賴
在 pom.xml 文件中添加以下依賴:
```xml
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

編寫實(shí)體類

@Data
public class User {
    @NotNull(message = "用戶名不能為空")
    private String username;
    @NotNull(message = "密碼不能為空")
    @Size(min = 6, message = "密碼長度不能小于 6 位")
    private String password;
}

編寫 Controller

@RestController
@RequestMapping("/user")
public class UserController {
    @PostMapping("/add")
    public Result addUser(@Validated @RequestBody User user) {
        // 處理添加用戶的邏輯
    }
}

在上述代碼中,@Validated 注解用于啟用數(shù)據(jù)校驗(yàn),@RequestBody 注解用于接收前臺(tái)發(fā)送的 JSON 數(shù)據(jù),并將其轉(zhuǎn)化為 User 對(duì)象。

編寫全局異常處理類

如果數(shù)據(jù)校驗(yàn)失敗,會(huì)拋出 MethodArgumentNotValidException 異常。我們可以在 ControllerAdvice 中捕獲此異常,并返回校驗(yàn)結(jié)果。

@RestControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public Result handleValidationException(MethodArgumentNotValidException e) {
        BindingResult bindingResult = e.getBindingResult();
        List<ObjectError> allErrors = bindingResult.getAllErrors();
        List<String> errorMessages = new ArrayList<>();
        for (ObjectError error : allErrors) {
            errorMessages.add(error.getDefaultMessage());
        }
        return Result.error(String.join(",", errorMessages));
    }
}

在上述代碼中,我們使用 @RestControllerAdvice 注解聲明一個(gè)全局異常處理類,其中 @ExceptionHandler 注解用于捕獲 MethodArgumentNotValidException 異常,并處理校驗(yàn)結(jié)果,最終返回一個(gè) Result 對(duì)象。

編寫啟動(dòng)類

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

編寫測(cè)試類

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class UserControllerTest {
    @Autowired
    private TestRestTemplate restTemplate;
    @Test
    public void addUserTest() {
        User user = new User();
        user.setUsername("test");
        user.setPassword("12345");
        ResponseEntity<Result> responseEntity = restTemplate.postForEntity("/user/add", user, Result.class);
        Assert.assertEquals(HttpStatus.OK, responseEntity.getStatusCode());
        Result result = responseEntity.getBody();
        Assert.assertEquals(ResultStatus.FAIL.getCode(), result.getStatus());
        Assert.assertEquals("密碼長度不能小于 6 位", result.getMessage());
    }
}

在上述代碼中,我們使用 SpringBoot 自帶的 TestRestTemplate 對(duì)象來模擬發(fā)送 POST 請(qǐng)求,并驗(yàn)證數(shù)據(jù)校驗(yàn)的結(jié)果是否符合預(yù)期。

總結(jié)

在 SpringBoot 中使用 @RequestBody 進(jìn)行數(shù)據(jù)校驗(yàn),可以有效地提高代碼的健壯性和可靠性。通過 JSR-303 提供的注解,我們可以輕松地對(duì) Java 對(duì)象進(jìn)行數(shù)據(jù)校驗(yàn),并在數(shù)據(jù)校驗(yàn)失敗時(shí)返回相應(yīng)的錯(cuò)誤信息。希望本文能夠?qū)Υ蠹以?SpringBoot 中使用 @RequestBody 進(jìn)行數(shù)據(jù)校驗(yàn)有所幫助。

以上就是SpringBoot 如何使用 @RequestBody 進(jìn)行數(shù)據(jù)校驗(yàn)的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot @RequestBody數(shù)據(jù)校驗(yàn)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java 繼承原理與用法實(shí)例分析

    Java 繼承原理與用法實(shí)例分析

    這篇文章主要介紹了Java 繼承原理與用法,結(jié)合實(shí)例形式分析了java面向?qū)ο蟪绦蛟O(shè)計(jì)中繼承的概念、原理、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2019-06-06
  • Java之OutputStreamWriter流案例詳解

    Java之OutputStreamWriter流案例詳解

    這篇文章主要介紹了Java之OutputStreamWriter流案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Java調(diào)用高德地圖API根據(jù)詳細(xì)地址獲取經(jīng)緯度詳細(xì)教程

    Java調(diào)用高德地圖API根據(jù)詳細(xì)地址獲取經(jīng)緯度詳細(xì)教程

    寫了一個(gè)經(jīng)緯度相關(guān)的工具,分享給有需求的小伙伴們,下面這篇文章主要給大家介紹了關(guān)于Java調(diào)用高德地圖API根據(jù)詳細(xì)地址獲取經(jīng)緯度,文中通過圖文以及代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-04-04
  • SpringBoot的跨域注解@CrossOrigin解析

    SpringBoot的跨域注解@CrossOrigin解析

    這篇文章主要介紹了SpringBoot的跨域注解@CrossOrigin解析,Spring Framework 4.2 GA為CORS提供了第一類支持,使您比通常的基于過濾器的解決方案更容易和更強(qiáng)大地配置它,所以springMVC的版本要在4.2或以上版本才支持@CrossOrigin,需要的朋友可以參考下
    2023-12-12
  • 利用微信小程序+JAVA實(shí)現(xiàn)微信支付的全過程

    利用微信小程序+JAVA實(shí)現(xiàn)微信支付的全過程

    微信支付是一種在線支付解決方案,允許用戶通過微信內(nèi)的支付功能進(jìn)行付款,下面這篇文章主要給大家介紹了關(guān)于利用微信小程序+JAVA實(shí)現(xiàn)微信支付的相關(guān)資料,需要的朋友可以參考下
    2024-08-08
  • MyBatis配置文件元素示例詳解

    MyBatis配置文件元素示例詳解

    在MyBatis框架的核心配置文件中,<configuration>元素是配置文件的根元素,其他元素都要在<contiguration>元素內(nèi)配置,這篇文章主要介紹了MyBatis配置文件元素,需要的朋友可以參考下
    2023-06-06
  • Java 將文件轉(zhuǎn)為字節(jié)數(shù)組知識(shí)總結(jié)及實(shí)例詳解

    Java 將文件轉(zhuǎn)為字節(jié)數(shù)組知識(shí)總結(jié)及實(shí)例詳解

    這篇文章主要介紹了Java 將文件轉(zhuǎn)為字節(jié)數(shù)組實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • elasticsearch?java客戶端action的實(shí)現(xiàn)簡單分析

    elasticsearch?java客戶端action的實(shí)現(xiàn)簡單分析

    這篇文章主要為大家介紹了elasticsearch?java客戶端action的實(shí)現(xiàn)簡單分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-04-04
  • Java中Boolean和boolean的區(qū)別詳析

    Java中Boolean和boolean的區(qū)別詳析

    boolean是基本數(shù)據(jù)類型Boolean是它的封裝類,和其他類一樣,有屬性有方法,可以new,下面這篇文章主要給大家介紹了關(guān)于Java中Boolean和boolean區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • Java如何實(shí)現(xiàn)實(shí)體類轉(zhuǎn)Map、Map轉(zhuǎn)實(shí)體類

    Java如何實(shí)現(xiàn)實(shí)體類轉(zhuǎn)Map、Map轉(zhuǎn)實(shí)體類

    這篇文章主要介紹了Java 實(shí)現(xiàn)實(shí)體類轉(zhuǎn)Map、Map轉(zhuǎn)實(shí)體類的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08

最新評(píng)論

利川市| 桂平市| 边坝县| 砀山县| 云和县| 容城县| 陆丰市| 宝山区| 尼勒克县| 乡宁县| 晋江市| 阿尔山市| 东城区| 德州市| 嘉黎县| 昌江| 广汉市| 鲜城| 华容县| 沾益县| 塔城市| 灵寿县| 蓬安县| 武功县| 安康市| 昂仁县| 九龙城区| 武清区| 纳雍县| 开远市| 平昌县| 新巴尔虎左旗| 蒙自县| 汉寿县| 综艺| 呼图壁县| 商水县| 巴彦淖尔市| 花莲县| 宣威市| 通河县|