복붙노트

[SPRING] 스프링 부트는 자바 주석에서 구성 속성 / 메시지를 외부화합니다.

SPRING

스프링 부트는 자바 주석에서 구성 속성 / 메시지를 외부화합니다.

@Value 주석을 사용하지 않고 봄에 외부 속성 파일에서 텍스트를 읽는 방법이 있습니까? 예 : application.properties

var.foo="hello"

봄 콩에 넣을 수 있습니다

@Value("${var.foo}") String value;

클래스 변수로. @Value 주석을 사용하지 않고이 속성을 포함시키는 방법이 있습니까? JSR Bean 유효성 검증과 같은 것.

@NotNull(message={custom.notnull})

ValidationMessages.properties 파일에서이 특성 값을 외부화하십시오.

예를 들어, 리소스 (웹 구성 요소) 클래스가 있고 Swagger 주석을 사용하여 문서화 해야하는 경우,

@controller
@path("/")
@Api(description = "User Resource API")
public class UserResource {

    @Path("/users")
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    @ApiOperation(value = "returns user details", notes = "some notes")
    public User getUser() {

        return new User(123, "Joe", "Montana");
    }
}

그리고 모델,

@ApiModel("user model")
public class User {

    @ApiModelProperty(value = "This represents user id")
    private String id;
    private String firstName;
    private String lastName;
    ...
}

이 문자열 / 문장 / 메시지를 외부 특성 파일로 어떻게 외부화합니까? 나는 이것이 일반적인 자바 주석과 스프링에 적용되며 Swagger에만 해당되지 않는다고 생각합니다. Swagger를 지정한 이유는 최대 절전 모드 유효성 검사와 마찬가지로 Java 라이브러리에 외부 ValidationMessages.properties 파일에서 이러한 메시지를 지정하는 옵션이 있고 스프링이 기본적으로 선택하여 구성하거나 구성 할 수 있기 때문입니다.

Swagger는 이러한 옵션을 제공합니까? 그렇지 않은 경우 어떻게 설정합니까?

근본적인 문제는 문서 관련 데이터 (메타 데이터)로 코드 / 논리를 복잡하게 만들고 싶지 않다는 것입니다.

해결법

  1. ==============================

    1.사용중인 주석의 기본 구현이 i18n에 대한 자체 표준 (예 : ValidationMessages.properties)을 제공하거나 Spring의 MessageSource를 지원하지 않는 한이를 달성 할 수 있다고 생각하지 않습니다.

    사용중인 주석의 기본 구현이 i18n에 대한 자체 표준 (예 : ValidationMessages.properties)을 제공하거나 Spring의 MessageSource를 지원하지 않는 한이를 달성 할 수 있다고 생각하지 않습니다.

    후자의 대안 인 경우, messages.properties 파일 내에 키 / 값 쌍을 추가하고 프레임 워크가 나머지를 수행하도록하기 만하면됩니다.

    messages.properties

    my.validation.error.message=Something went terribly wrong!
    

    SomeClass.java

    @MySpringCompatibleValidationAnnotation("my.validation.error.message")
    private String someVariable;
    

    결론은 사용하려는 프레임 워크에 따라이 기본 제공을 지원하거나 지원하지 않을 수 있습니다.

    이제 Swagger가 진행되는 한, i18n 문서 지원은 새로운 기능으로 제안되었지만, 구현 방법에 대해 더 많은 생각을하면서 종료되거나 보류되었습니다. 자세한 내용은 https://github.com/OAI/OpenAPI-Specification/issues/274를 참조하십시오.

  2. ==============================

    2.@Value ( "$ {property}") 어노테이션을 사용하여 구성 특성을 주입하는 것은 때때로 번거로울 수 있으므로 스프링 부트에서 @ConfigurationProperties를 도입했습니다. 이것이 원하는 솔루션입니다.

    @Value ( "$ {property}") 어노테이션을 사용하여 구성 특성을 주입하는 것은 때때로 번거로울 수 있으므로 스프링 부트에서 @ConfigurationProperties를 도입했습니다. 이것이 원하는 솔루션입니다.

    다음은 참조 문서입니다.

  3. ==============================

    3.구성 파일에서 Bean을 선언 할 때 플레이스 홀더를 사용할 수 있습니다. https://www.mkyong.com/spring/spring-propertyplaceholderconfigurer-example/

    구성 파일에서 Bean을 선언 할 때 플레이스 홀더를 사용할 수 있습니다. https://www.mkyong.com/spring/spring-propertyplaceholderconfigurer-example/

  4. ==============================

    4.Spring Boot를 사용하는 경우 특별한 구성을 수행하지 않고도이 방법을 시도 할 수 있습니다

    Spring Boot를 사용하는 경우 특별한 구성을 수행하지 않고도이 방법을 시도 할 수 있습니다

    @environment.getProperty('property')
    
  5. from https://stackoverflow.com/questions/39107413/spring-boot-externalize-config-properties-messages-on-java-annotations by cc-by-sa and MIT license