MultipartFile
이 이미지인지 확인하는 특수 효과를 원합니다. @interface
과 ConstraintValidator
을 생성하고 내 필드에 특수 효과를 추가했습니다.스프링 부트 - 양식의 사용자 정의 유효성 검사 주석이 작동하지 않습니다.
기타 유효성 검사 주석 (예 : @NotEmpty
및 @Size(min = 0, max = 2)
)이 정상적으로 작동합니다.
다음은 요약 코드입니다. This question에도 같은 문제가 있지만 답변이 나에게 도움이되지 않습니다. Form.java
:
@Validated
public class Form {
@MultipartImage
private MultipartFile image;
...
}
@interface MultipartImage
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.LOCAL_VARIABLE;
import static java.lang.annotation.ElementType.METHOD;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import validation.MultipartFileImageConstraintValidator;
@Documented
@Constraint(validatedBy = { MultipartFileImageConstraintValidator.class })
@Target({ LOCAL_VARIABLE, FIELD, METHOD })
@Retention(RetentionPolicy.RUNTIME)
public @interface MultipartImage {
String message() default "{MultipartImage.message}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
유효성 검사기, MultipartFileConstraintValidator.java
import java.io.IOException;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import org.springframework.web.multipart.MultipartFile;
public class MultipartFileConstraintValidator implements ConstraintValidator<MultipartImage, MultipartFile> {
@Override
public void initialize(final MultipartImage constraintAnnotation) {
}
@Override
public boolean isValid(final MultipartFile file, final ConstraintValidatorContext context) {
return false;
}
여기 형 컨트롤러에있어서 제출있어
검사기는 @Configuration 파일에 설정@RequestMapping(value = "/formsubmit", method = RequestMethod.POST)
public ModelAndView handleForm(@Validated final Form form,
final BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
...
// returns the model
}
}
는 https://stackoverflow.com/a/21965098/4161471
@Configuration
@ConfigurationProperties("static")
@AutoConfigureAfter(DispatcherServletAutoConfiguration.class)
public class StaticResourceConfig extends WebMvcConfigurerAdapter {
...
@Bean(name = "validator")
public LocalValidatorFactoryBean validator() {
LocalValidatorFactoryBean bean = new LocalValidatorFactoryBean();
bean.setValidationMessageSource(messageSource());
return bean;
}
@Bean
public MethodValidationPostProcessor methodValidationPostProcessor() {
final MethodValidationPostProcessor methodValidationPostProcessor = new MethodValidationPostProcessor();
methodValidationPostProcessor.setValidator(validator());
return methodValidationPostProcessor;
}
@Override
public Validator getValidator() {
return validator();
}
@Bean
public ReloadableResourceBundleMessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
// Load files containing message keys.
// Order matters. The first files override later files.
messageSource.setBasenames(//
// load messages and ValidationMessages from a folder relative to the jar
"file:locale/messages", //
"file:locale/ValidationMessages", //
// load from within the jar
"classpath:locale/messages", //
"classpath:locale/ValidationMessages" //
);
messageSource.getBasenameSet();
messageSource.setCacheSeconds(10); // reload messages every 10 seconds
return messageSource;
}
}를 참조
죄송합니다. 제출이 너무 일찍 발생했습니다. 곧 더 많은 정보를 추가하겠습니다. – aSemy
MultipartFileConstraintValidator는 ConstraintValidator을 구현해야합니다. '@ Size'와 같은 다른 제약이'Form' 클래스에 존재합니까? 아니면 다른 클래스에서 검증 했습니까? –
@DanielOlszewski 그게 실수 야. 이제는 바로 잡았어. 다른 제약은 같은'Form' 클래스에서 작동합니다. – aSemy