목차
1. 소개
2. 매개변수를 우아하게 검증하는 방법
2.1 공식 지침
2.2 주석 사용 지침
Java java지도 시간 Java에서 우아한 매개변수 확인을 구현하는 방법

Java에서 우아한 매개변수 확인을 구현하는 방법

May 19, 2023 pm 07:43 PM
java

1. 소개

메소드의 매개변수를 검증하려면 다음과 같이 작성하면 됩니다.

    public static void utilA(String a,BigDecimal b){
        if (StringUtils.isEmpty(a)){
            System.out.println("a不可为空");
            return;
        }
        if (b == null){
            System.out.println("b不可为空");
            return;
        }
        if (b.compareTo(BigDecimal.ZERO) != 1){
            System.out.println("b的取值范围不正确");
            return;
        }
        System.out.println("do something");
    }

기능적인 관점에서는 전혀 문제가 없습니다.

그러나 코드의 장기적인 유지 관리 측면에서 볼 때 코드 재사용률은 낮습니다. 검증 규칙이 너무 많으면 유지 관리가 어렵고 약간의 추구가 있는 엔지니어에게는 서투른 것처럼 보입니다. 큰 일은 여전히 ​​받아들이기 어렵습니다.

사전 조건(com.google)과 같은 일부 솔루션이 있지만 모든 시나리오에 적용하기 어렵고 사용하기에도 불편합니다.

2. 매개변수를 우아하게 검증하는 방법

Spring은 명확한 의미를 지닌 우아한 메소드 수준 검증을 공식적으로 권장합니다(입력 매개변수 검증, 반환값 검증)

2.1 공식 지침

Spring 공식 지침은 SpringBoot 문서에 있으며, 매개변수 검증을 위해 제공되는 솔루션입니다. (Validation)은 다음과 같습니다.

@Service
@Validated
public class MyBean {
 
    public Archive findByCodeAndAuthor(@Size(min = 8, max = 10) String code,
            Author author) {
        ...
    }
 
}

Spring Boot 공식 홈페이지 문서 "37. Validation"

즉, JSR-303 스펙을 사용하고 매개변수 검증을 위해 Annotation을 직접 사용한다는 것입니다.

(JSR-303은 Bean Validation이라고 하는 JAVA EE 6의 하위 사양이며 공식 참조 구현은 Hibernate Validator입니다.)

2.2 주석 사용 지침

2.2.1 주석 소개

간단합니다. 유형 매개변수(Non-Bean), 주석을 사용하여 매개변수 바로 앞에 제약 조건 규칙을 추가합니다. 주석은 다음과 같습니다.

@AssertTrue / @AssertFalse

Validation 적용 필드: boolean

Annotation 설명: 값이 true / false인지 확인

@DecimalMax / @DecimalMin

Validation 적용 필드: BigDecimal, BigInteger, String, byte, short, int, long

주석: 값이 지정된 소수점 값보다 작거나 같은지 확인하세요. 소수점 이하 자릿수에는 정밀도 문제가 있습니다.

@Digits

확인 해당 필드: BigDecimal, BigInteger, String ,byte, short, int, long

주석: 값의 수치 구성이 합법적인지 확인

속성 설명: 정수: 정수 부분의 자릿수를 지정합니다. 분수: 분수 부분의 자릿수를 지정합니다.

@Future / @Past

검증 적용 필드: 날짜, 달력

주석 설명: 값이 현재 시간 이후/이전인지 확인

속성 설명: Public

@Max / @Min

검증 적용 가능 필드: BigDecimal, BigInteger, String, byte, short, int, long

주석: 값이 지정된 정수 값보다 작거나 같은지 확인

속성 설명: Public

참고: 권장 사항 Stirng 및 Integer 유형을 사용하십시오. 양식에서 제출한 값이 ""

@NotNull / @Null

인 경우 int로 변환할 수 없으므로 int 유형을 사용하지 않는 것이 좋습니다.

주석: 값이 null이 아닌지 확인/비어 있음

속성 설명: Public

@NotBlank 제약 조건 문자열이 Null인지, 잘린 문자열의 길이가 0보다 큰지 확인(문자열에 대해서만),

@NotEmpty 요소가 Null인지 EMPTY인지 확인하세요.

@NotBlank와 @NotEmpty의 차이점: 공백(" ")은 NotEmpty에 적합하지만 NotBlank입니다. 확인 예외가 발생합니다

@Pattern

검증 적용 필드: 문자열

주석: 값에 정규 표현식이 포함되어 있는지 확인

속성 설명: regexp: 정규 표현식 플래그: Pattern.Flag를 지정하는 배열, 정규식의 관련 옵션을 나타냅니다.

@Size

검증 적용 필드: String, Collection, Map, Array

Annotation: 값이 길이 요구 사항을 충족하는지 확인

속성 설명: max: 최대 길이를 지정, min: 최소 길이를 지정합니다.

@Length(min=, max=): 특히 문자열 유형에 적용됨

@Valid

검증 적용 필드: 연관 객체를 재귀적으로 검증

참고: 연관 객체가 컬렉션 또는 배열인 경우, 그런 다음 해당 요소에 대해 재귀 검증을 수행합니다. 맵인 경우 값 부분을 검증합니다(재귀 검증 수행 여부)

속성 설명: None

@Range(min=, max=) 지정된 요소는 반드시 내에 있어야 합니다. 해당 범위

@CreditCardNumber 신용카드 인증

@Email 이메일 주소인지 확인합니다. null인 경우 인증을 수행하지 않고 인증에 통과됩니다.

@URL(protocol=,host=, port=,regexp=, flags=)

2.2.2

1을 사용하여 해당 필드에 주석을 추가합니다. 메서드 호출 시 전달된 실제 매개변수가 제약 조건 규칙과 일치하지 않으면 ConstraintViolationException이 직접 발생하여 매개변수 확인이 실패했음을 나타냅니다.

 <!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator -->
        <dependency>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>6.1.5.Final</version>
        </dependency>

3.. Bean 유형 매개변수의 경우 Bean 내부의 각 필드에 제약 조건 주석을 추가한 다음 메서드 매개변수 앞에 @Validated 또는 @Valid 주석을 추가합니다. 예:

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotEmpty;
 
/**
 * @Author: wangxia
 * @Date: 2021/10/20 16:30
 */
public class TestPerson {
 
    @NotEmpty(message = "用户名不能为空")
    private String username;
 
    @Min(value = 0,message = "年龄不能小于0岁")
    @Max(value =150,message = "年龄不能大于150岁")
    private int age;
 
    public String getUsername() {
        return username;
    }
 
    public void setUsername(String username) {
        this.username = username;
    }
 
    public int getAge() {
        return age;
    }
 
    public void setAge(int age) {
        this.age = age;
    }
}

4. 예외를 적절하게 포착합니다. 이 단계는 생략할 수 있지만 요청 시 400 예외 프롬프트와 함께 직접 반환되므로 매우 우아하지 않습니다.

@RequestMapping("/")
@RestController
public class TestValidatController {
 
    @PostMapping("/testValid")
    public String testValid(@Validated @RequestBody TestPerson testPerson){
        return "测试成功";
    }
 
}

우아하게 잡힌 예외 프롬프트 추가:

Java에서 우아한 매개변수 확인을 구현하는 방법우아하게 잡힌 예외 프롬프트를 추가하지 않음:

Java에서 우아한 매개변수 확인을 구현하는 방법

위 내용은 Java에서 우아한 매개변수 확인을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Java 프로젝트 관리를위한 Maven에 대한 개발자 안내서 Java 프로젝트 관리를위한 Maven에 대한 개발자 안내서 Jul 30, 2025 am 02:41 AM

Maven은 Java 프로젝트 관리 및 건설을위한 표준 도구입니다. 답은 POM.XML을 사용하여 프로젝트 구조, 종속성 관리, 건설 라이프 사이클 자동화 및 플러그인 확장을 표준화한다는 사실에 있습니다. 1. pom.xml을 사용하여 groupId, artifactid, 버전 및 종속성을 정의하십시오. 2. MVNClean, 컴파일, 테스트, 패키지, 설치 및 배포와 같은 마스터 코어 명령; 3. 종속성 버전 및 충돌을 관리하기 위해 종속성 관리 및 제외를 사용합니다. 4. 다중 모듈 프로젝트 구조를 통해 대규모 응용 프로그램을 구성하고 부모 POM에 의해 균일하게 관리됩니다. 5.

Jakarta EE와 함께 Java에서 편안한 API를 구축합니다 Jakarta EE와 함께 Java에서 편안한 API를 구축합니다 Jul 30, 2025 am 03:05 AM

setupamaven/gradleProjectwithJax-rsddependencies likejersey; 2. createarestresourceUsingAnnotationsSuchas@pathand@get;

파이썬 속성 데코레이터 예제 파이썬 속성 데코레이터 예제 Jul 30, 2025 am 02:17 AM

@Property Decorator는 속성의 판독, 설정 및 삭제 제어를 구현하기 위해 메소드를 속성으로 변환하는 데 사용됩니다. 1. 기본 사용 : @property를 통해 읽기 전용 속성을 정의하고, 예를 들어 반경을 기준으로 계산되고 직접 액세스되는 경우; 2. 고급 사용 : @name.setter 및 @name.deleter를 사용하여 속성 할당 확인 및 삭제 작업을 구현합니다. 3. 실제 응용 프로그램 : BankAccount와 같은 세터에서 데이터 검증을 수행하여 잔액이 음수가 아닌지 확인하십시오. 4. 이름 지정 사양 : 내부 변수는 접두사이며 속성 메소드 이름은 속성과 일치하며 통합 액세스 제어는 코드 보안 및 유지 관리에 사용됩니다.

CSS 다크 모드 전환 예 CSS 다크 모드 전환 예 Jul 30, 2025 am 05:28 AM

먼저 JavaScript를 사용하여 사용자 시스템 환경 설정과 로컬로 저장된 테마 설정을 얻고 페이지 테마를 초기화하십시오. 1. HTML 구조에는 주제 스위칭을 트리거하는 버튼이 포함되어 있습니다. 2. CSS 사용 : 루트는 밝은 테마 변수를 정의하기 위해 루트, .dark-mode 클래스는 어두운 테마 변수를 정의하고 var ()를 통해 이러한 변수를 적용합니다. 3. JavaScript는 색채를 선호하는 것을 감지하고 초기 테마를 결정하기 위해 LocalStorage를 읽습니다. 4. 버튼을 클릭 할 때 HTML 요소에서 Dark-Mode 클래스를 전환하고 현재 상태를 LocalStorage에 저장합니다. 5. 모든 색상 변경 사항은 0.3 초 전환 애니메이션을 동반하여 사용자를 향상시킵니다.

Java에서 블록 체인 응용 프로그램 개발 Java에서 블록 체인 응용 프로그램 개발 Jul 30, 2025 am 12:43 AM

블록, 해시, 체인 구조, 합의 메커니즘 및 불변성을 포함한 블록 체인의 핵심 구성 요소를 이해합니다. 2. 데이터, 타임 스탬프, 이전 해시 및 비 세가 포함 된 블록 클래스를 생성하고 SHA-256 해시 계산 및 작업 채굴 증명을 구현합니다. 3. 블록 목록을 관리하고 블록 목록을 관리하고, 창세기 블록을 초기화하고, 새 블록을 추가하고 체인의 무결성을 확인하기 위해 블록 체인 클래스를 구축하십시오. 4. 메인 테스트 블록 체인을 작성하고 트랜잭션 데이터 블록을 차례로 추가하고 출력 체인 상태를 추가하십시오. 5. 선택적 향상 기능에는 트랜잭션 지원, P2P 네트워크, 디지털 서명, RESTAPI 및 데이터 지속성; 6. 생산 수준 오프닝에는 HyperledgerFabric, Web3J 또는 Corda와 같은 Java 블록 체인 라이브러리를 사용할 수 있습니다.

해싱에 Java MessageDigest를 사용하는 방법 (MD5, SHA-256)? 해싱에 Java MessageDigest를 사용하는 방법 (MD5, SHA-256)? Jul 30, 2025 am 02:58 AM

Java를 사용하여 해시 값을 생성하려면 MessageDigest 클래스를 통해 구현할 수 있습니다. 1. MD5 또는 SHA-256과 같은 지정된 알고리즘의 인스턴스를 가져옵니다. 2. 암호화 할 데이터를 전달하려면 .update () 메소드를 호출하십시오. 3. 해시 바이트 배열을 얻으려면 .digest () 메소드를 호출하십시오. 4. 바이트 배열을 읽기를 위해 16 진수 문자열로 변환합니다. 큰 파일과 같은 입력의 경우 청크로 읽고 .update ()를 여러 번 호출하십시오. 보안을 보장하기 위해 MD5 또는 SHA-1 대신 SHA-256을 사용하는 것이 좋습니다.

CSS 드롭 다운 메뉴 예제 CSS 드롭 다운 메뉴 예제 Jul 30, 2025 am 05:36 AM

예, 공통 CSS 드롭 다운 메뉴는 JavaScript가없는 순수한 HTML 및 CSS를 통해 구현할 수 있습니다. 1. 중첩 UL과 Li를 사용하여 메뉴 구조를 구축하십시오. 2. 호버 의사 클래스를 사용하여 디스플레이를 제어하고 풀다운 컨텐츠의 숨기기; 3. 설정 위치 : 부모 Li의 상대적, 하위 메뉴는 위치를 사용하여 위치합니다. 절대; 4. 하위 메뉴가 표시되는 기본값 : 없음, 디스플레이가됩니다 : 호버링시 블록; 5. 다중 레벨 풀다운은 중첩을 통해 달성하고, 전환과 결합하고, 페이드 인 애니메이션을 추가하고 미디어 쿼리가있는 모바일 터미널에 조정될 수 있습니다. 전체 솔루션은 간단하며 JavaScript 지원이 필요하지 않으므로 대형에 적합합니다.

파이썬 구문 분석 날짜 문자열 예제 파이썬 구문 분석 날짜 문자열 예제 Jul 30, 2025 am 03:32 AM

DateTime.strpTime ()을 사용하여 날짜 문자열을 DateTime 객체로 변환하십시오. 1. 기본 사용 : "%y-%m-%d"를 통해 DateTime 객체로서 "2023-10-05"; 2. 미국 날짜에 "%m/%d/%y", "%d/%m/%y", 영국 날짜를 구문 분석하기 위해 "%b%d,%y%i :%m%p"와 같은 여러 형식을 지원합니다. 3. dateUtil.parser.parse ()를 사용하여 알 수없는 형식을 자동으로 추론합니다. 4. 사용 .D

See all articles