주석 매핑 및 빈 유효성 검사
17005 단어 openapijavamicronautspringboot
openapi-processor란 무엇입니까?
openapi-processor은 OpenAPI yaml 파일을 처리하기 위한 작은 프레임워크입니다. 현재 openapi-processor는 Spring Boot 및 Micronaut에 대한 Java 코드 생성을 제공합니다.
빌드 프로세스의 일부로 OpenAPI yaml 파일을 Java(컨트롤러) 인터페이스 및 (페이로드) pojo 클래스로 변환하는 플러그인으로 gradle 및 maven을 지원합니다.
컨트롤러 인터페이스와 pojo 클래스는 다른 jvm 언어에서 쉽게 사용할 수 있기 때문에 Java를 생성합니다. 일반적으로 생성된 코드를 보지 않고 그냥 사용하게 됩니다.
주석 매핑
주석 유형 매핑을 사용하면 생성된 모델 클래스 또는 해당 클래스의 끝점 메서드 매개 변수에 주석을 추가할 수 있습니다.
스키마의 pojo 모델 클래스에 커스텀 빈 유효성 검사를 추가하기 위해 고안된 예제를 살펴보겠습니다.
자세한 내용은 annotation mapping 설명서를 참조하십시오.
예제 API
다음은 Foo 스키마를 요청 본문으로 사용하는 간단한 API입니다. 스키마에는 속성에 대한 몇 가지 (쓸모없는 ;-) 숫자 제한이 있습니다.
openapi.yaml
openapi: 3.1.0 info: title: annotation mapping example version: 1.0.0 paths: /foo: post: summary: annotation mapping example endpoint. description: a simple endpoint where an annotation mapping is used on the request body requestBody: content: application/json: schema: $ref: '#/components/schemas/Foo' required: true responses: '201': description: empty response components: schemas: Foo: type: object properties: foo1: type: integer minimum: 0 foo2: type: integer minimum: -10 빈 유효성 검사 주석
mapping.yaml(프로세서 구성)에서 빈 유효성 검사를 활성화하면 속성 제약 조건에 대한 빈 유효성 검사 주석이 있는 Foo 클래스가 생성됩니다.생성된 파일
package io.openapiprocessor.openapi.model; import com.fasterxml.jackson.annotation.JsonProperty; import io.openapiprocessor.openapi.support.Generated; import javax.validation.constraints.DecimalMin; @Generated(value = "openapi-processor-spring", version = "2022.5") public class Foo { @DecimalMin(value = "0") // <1> @JsonProperty("foo1") private Integer foo1; @DecimalMin(value = "-10") // <1> @JsonProperty("foo2") private Integer foo2; public Integer getFoo1() { return foo1; } public void setFoo1(Integer foo1) { this.foo1 = foo1; } public Integer getFoo2() { return foo2; } public void setFoo2(Integer foo2) { this.foo2 = foo2; } } <1> OpenAPI 제약 조건에서 생성된 빈 유효성 검사 주석입니다.
커스텀 빈 검증 어노테이션
이제
Integer 를 작성하여 두 가지@Sum(24) 속성의 합계를 확인하는 유효성 검사를 추가하고 싶습니다.주석을 만들어 봅시다
수동으로 생성된 커스텀 빈 유효성 검사 주석
package io.openapiprocessor.samples.validations; import javax.validation.Constraint; import javax.validation.Payload; import java.lang.annotation.*; @Constraint (validatedBy = {FooSumValidator.class}) @Target ({ ElementType.TYPE, ElementType.PARAMETER }) @Retention (value = RetentionPolicy.RUNTIME) public @interface Sum { String message () default "invalid sum"; Class<?>[] groups () default {}; Class<? extends Payload>[] payload () default {}; int value(); } 그리고 유효성 검사 코드.
수동으로 생성된 검증
package io.openapiprocessor.samples.validations; import io.openapiprocessor.openapi.model.Foo; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; public class FooSumValidator implements ConstraintValidator<Sum, Foo> { private Integer sum; @Override public void initialize (Sum constraintAnnotation) { sum = constraintAnnotation.value (); } @Override public boolean isValid (Foo value, ConstraintValidatorContext context) { return value.getFoo1 () + value.getFoo2 () == sum; } } 사용자 지정 주석에 대한 매핑
이제 생성된
Foo pojo 모델 클래스에 맞춤형 주석을 추가하도록 프로세서에 지시하는 주석 유형 매핑이라는 흥미로운 부분이 있습니다.프로세서 구성 mapping.yaml
openapi-processor-mapping: v2.1 # <1> options: package-name: io.openapiprocessor.openapi bean-validation: true map: types: # <2> - type: Foo @ io.openapiprocessor.samples.validations.Sum(24) <1> 새로운 매핑 버전. 다른 버전을 사용하면 매핑이 잘못되었다는 경고가 생성됩니다.
<2>
Foo 스키마(Foo는 OpenAPI 스키마의 이름임)를 Foo 스키마에 대해 생성된 pojo 모델 클래스에 지정된 주석으로 @nnotate하도록 프로세서에 알리는 주석 매핑입니다. 주석은 정규화된 이름(가져오기를 만드는 데 필요함) 및 (선택 사항) 고정 매개변수와 함께 제공됩니다.사용자 지정 주석이 있는 모델 클래스
이제 구성의 주석 매핑을 사용하여 프로세서는 다음과 같이 생성합니다
Foo.사용자 지정 주석이 있는 생성된 파일
package io.openapiprocessor.openapi.model; import com.fasterxml.jackson.annotation.JsonProperty; import io.openapiprocessor.openapi.support.Generated; import javax.validation.constraints.DecimalMin; import io.openapiprocessor.samples.validations.Sum; @Sum(24) // <1> @Generated(value = "openapi-processor-spring", version = "2022.5") public class Foo { @DecimalMin(value = "0") @JsonProperty("foo1") private Integer foo1; @DecimalMin(value = "-10") @JsonProperty("foo2") private Integer foo2; public Integer getFoo1() { return foo1; } public void setFoo1(Integer foo1) { this.foo1 = foo1; } public Integer getFoo2() { return foo2; } public void setFoo2(Integer foo2) { this.foo2 = foo2; } } <1> 사용자 지정 빈 유효성 검사 주석.
요약
이 작은 기사에서는 프로세서 매핑 구성에 주석 유형 매핑을 추가하여 생성된 클래스에 사용자 지정 주석을 추가하는 방법을 설명했습니다.
openapi-processor 및 OpenAPI 설명에서 컨트롤러 인터페이스 및 모델 클래스를 생성하는 방법에 대해 자세히 알아보려면 documentation 을 살펴보십시오.
Reference
이 문제에 관하여(주석 매핑 및 빈 유효성 검사), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/hauner/annotation-mapping-bean-validation-bd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)