programing

@NotNull 주석이 Spring 부팅 응용 프로그램에서 작동하지 않습니다.

sourcejob 2023. 7. 18. 21:42
반응형

@NotNull 주석이 Spring 부팅 응용 프로그램에서 작동하지 않습니다.

아래는 저의 DTO 수업입니다.

public class AbstractDTO extends BaseDTO {

    private Integer createdBy;

    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DATE_FORMAT)
    @NotNull(message = "createdDate may not be null")
    private LocalDateTime createdDate;

    private Integer lastModifiedBy;
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DATE_FORMAT)
    private LocalDateTime lastModifiedDate;

    private Boolean isActive;

    // getter & setters
}

여기서 생성된 날짜 필드에 @NotNull로 주석을 달려고 하는데 작동하지 않습니다.우체부에서 서비스를 실행한 후 오류가 발생하지 않도록 요청 본문에서 허용하고 있습니다.

아래 옵션을 시도해 보았지만 실패했습니다.

메이븐 종속성을 추가하려고 했습니다.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

DTO 클래스에 @Validated로 주석을 달려고 했습니다.

생성된 날짜 필드 @Valid에 @Null이 아닌 @Null에 주석을 달려고 했지만 여전히 행운이 아닙니다.

이 문제를 해결하는 것을 도와주세요.

DTO 클래스가 맞습니다.사용해야 합니다.@Valid주석

예:

@Controller
public class Controller {

    @PostMapping("/")
    public String checkPersonInfo(@Valid AbstractDTO abstractDTO, BindingResult bindingResult) {

        if (bindingResult.hasErrors()) {
            return "some-page";
        }
        return "some-other-page";
    }
}

양식 입력 유효성 검사 시 이 스프링 부트 예제를 참조하십시오.

사용해야 하는 이유@Valid주석?

이를 통해 클래스의 데이터 멤버에 적용된 제약 조건 집합의 유효성을 검사할 수 있습니다.


그러나 프로젝트에 XML 기반 구성이 있는 경우 아래에 제공된 applicationContext.xml에 이를 추가해야 합니다. (출처: 여기)

<bean
    class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="webBindingInitializer">
        <bean
            class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
            <property name="validator" ref="validator" />
        </bean>
    </property>
</bean> 

    <bean id="validator"
        class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
    </bean>

엔드포인트에 다음과 같은 요청 본문이 있습니다.

@RestController
public class TheController {

    @PostMapping(path = "/doSomething", consumes = "application/json", produces = "application/json")
    public void post(@Valid @RequestBody AbstractDTO request) {
        //code
    }
}

당신은 가지고 있어야 합니다.@Valid요청 개체에 대한 주석입니다.이 경우에만 유효성 검사를 사용할 수 있습니다.AbstractDTO위해서/doSomething종점의

자세한 내용은 여기를 참조하십시오.

수입품이 맞습니까?
사용합니다import javax.validation.constraints.NotNull;

묘사

  1. 저의 경우, 1개의 부모 클래스 A에는 다음과 같은 3개의 하위 클래스 B, C, D가 있다고 정의합니다.

public A {privateBbCommand}, privateCcCommand; privateDdCommand; }

  1. 3개의 하위 클래스에 있는 일부 필드에 대해 @NotNull, @NotBlank에 주석을 달았습니다.컨트롤러에서 다음과 같은 기능을 위해 @Valid를 입력했습니다.

@PostMapping() 공용 응답 엔티티 생성(@RequestBody @ValidA)
명령){ }

해결책

  1. 제약 조건을 확인해야 하는 필드가 있는 하위 클래스에 @Valid를 입력했습니다.
  2. 예: 클래스 B, C에는 null이 아닌 것과 같은 제약 조건이 있는 일부 필드가 있습니다.

public A { @Valid privateBbCommand; @Valid privateCcCommand; privateDdCommand; }

언급URL : https://stackoverflow.com/questions/58182553/notnull-annotation-is-not-working-in-spring-boot-application

반응형