如何有效進行Java參數校驗?

在Java實現業務功能時,參數校驗是必不可少的一步。通過參數校驗,可以保證代碼的可靠性和安全性,避免出現各種不可預期的錯誤。本文將從多個方面為您詳細闡述如何有效進行Java參數校驗。

一、正確使用註解驗證

註解驗證是Java中常用的參數校驗方法,核心是javax.validation框架提供的一組標準驗證註解。在使用註解驗證時,需要在請求參數中添加相應的註解,例如@NotNull、@Size等,然後在Controller中添加@Valid註解即可。註解驗證的特點是代碼簡潔,易於維護。

以下是使用註解驗證的示例代碼:

public class User {
    
    @NotNull(message="用戶名不能為空")
    private String username;
    
    @Size(min=6,max=16,message="密碼長度必須在6-16位之間")
    private String password;
    
    //getters and setters
    
}

public class UserController {
    
    @PostMapping("/user")
    public ResponseEntity addUser(@Valid @RequestBody User user){
        //處理添加用戶的邏輯
        return new ResponseEntity(HttpStatus.OK);
    }
}

二、參數校驗工具類

除了使用註解驗證外,也可以通過封裝參數校驗工具類的方式實現參數校驗。參數校驗工具類是一個全局的工具類,可以在多個地方使用。在工具類中,將所有需要驗證的參數分別進行校驗並將異常信息收集處理,最後返回校驗結果。這種方法的優點是將驗證邏輯獨立出來,易於擴展。

以下是使用參數校驗工具類的示例代碼:

public class ValidationUtil {
    
    public static  void validate(T obj) throws BadRequestException {
        Set<ConstraintViolation> constraintViolations = validator.validate(obj);

        if (!constraintViolations.isEmpty()) {
            List errorMsg = constraintViolations.stream()
                    .map(ConstraintViolation::getMessage)
                    .collect(Collectors.toList());
            throw new BadRequestException(errorMsg.toString());
        }
    }
}

public class UserController {
    
    @PostMapping("/user")
    public ResponseEntity addUser(@RequestBody User user){
        ValidationUtil.validate(user);
        //處理添加用戶的邏輯
        return new ResponseEntity(HttpStatus.OK);
    }
}

三、統一異常處理

在進行參數校驗時,可能會出現各種異常,如空指針異常、參數不合法等。針對這些異常,可以通過統一異常處理的方式進行處理,避免代碼重複。在Spring Boot中,可以通過@ControllerAdvice註解實現統一異常處理。

以下是使用統一異常處理的示例代碼:

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(BadRequestException.class)
    @ResponseBody
    public ResponseEntity handleBadRequestException(BadRequestException e) {
        return new ResponseEntity(e.getMessage(), HttpStatus.BAD_REQUEST);
    }

    @ExceptionHandler(Exception.class)
    @ResponseBody
    public ResponseEntity handleException(Exception e) {
        return new ResponseEntity("系統異常,請稍後重試", HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

public class UserController {
    
    @PostMapping("/user")
    public ResponseEntity addUser(@Valid @RequestBody User user){
        //處理添加用戶的邏輯
        return new ResponseEntity(HttpStatus.OK);
    }
}

四、自定義校驗規則

在實現參數校驗時,有些校驗規則可能是系統中獨有的,無法通過註解驗證或者參數校驗工具類來實現。此時,可以通過編寫自定義校驗規則的方式實現參數校驗。實現自定義校驗規則需要繼承ConstraintValidator類,並在定義的註解中引入自定義的校驗規則。

以下是使用自定義校驗規則的示例代碼:

@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = UsernameValidator.class)
public @interface Username {
    String message() default "用戶名不符合規範";
    Class[] groups() default {};
    Class[] payload() default {};
}

public class UsernameValidator implements ConstraintValidator {
    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        //校驗規則
        return true;
    }
}

public class User {
    
    @NotNull(message="用戶名不能為空")
    @Username
    private String username;
    
    @Size(min=6,max=16,message="密碼長度必須在6-16位之間")
    private String password;
    
    //getters and setters
}

public class UserController {
    
    @PostMapping("/user")
    public ResponseEntity addUser(@Valid @RequestBody User user){
        //處理添加用戶的邏輯
        return new ResponseEntity(HttpStatus.OK);
    }
}

總結

在Java實現業務功能時,參數校驗是必不可少的一步。通過註解驗證、參數校驗工具類、統一異常處理和自定義校驗規則等方式,可以有效進行Java參數校驗。在實際應用中,可以根據具體情況選擇最合適的校驗方式,保證代碼的可靠性和安全性。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/283583.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-22 08:08
下一篇 2024-12-22 08:08

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • 三星內存條參數用法介紹

    本文將詳細解釋三星內存條上面的各種參數,讓你更好地了解內存條並選擇適合自己的一款。 一、容量大小 容量大小是內存條最基本的參數,一般以GB為單位表示,常見的有2GB、4GB、8GB…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發佈。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Python3定義函數參數類型

    Python是一門動態類型語言,不需要在定義變量時顯示的指定變量類型,但是Python3中提供了函數參數類型的聲明功能,在函數定義時明確定義參數類型。在函數的形參後面加上冒號(:)…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29

發表回復

登錄後才能評論