주석 매핑 및 빈 유효성 검사
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.)