Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
 Не работает Spring Validation в Spring Boot 2  [new]
Tsyklop
Member

Откуда: Украина
Сообщений: 1069
Хочу сделать валидировать входящие данные при помощи spring valitator.

Создал Валидатор:

@Component
public class PropertyValidator implements Validator {

    @Override
    public boolean supports(Class<?> clazz) {
        return PropertyDTO.class.equals(clazz);
    }

    @Override
    public void validate(Object target, Errors errors) {

        ValidationUtils.rejectIfEmptyOrWhitespace(errors, "address", "address.empty", "Address Incorrect");
        ValidationUtils.rejectIfEmptyOrWhitespace(errors, "description", "description.empty", "Description Incorrect");

        PropertyDTO p = (PropertyDTO) target;

        if (Objects.isNull(p.getX())) {
            errors.rejectValue("x", "coordinate.null", "X coordinate cannot be null");
        } else if (Objects.isNull(p.getY())) {
            errors.rejectValue("y", "coordinate.null", "Y coordinate cannot be null");
        }

    }

}


Контроллер:

@RestController
@RequestMapping("/api/v1/property")
@RequiredArgsConstructor
public class PropertyRestController extends AbstractRestController {

    private final Validator propertyValidator;

    private final PropertyService propertyService;

    @InitBinder
    protected void initBinder(WebDataBinder binder) {
        binder.setValidator(this.propertyValidator);
    }

    @GetMapping
    public ResponseEntity findAll() {
        return this.propertyService.findAll();
    }

    @GetMapping("/{x}/{y}")
    public ResponseEntity findAllByDistance(@PathVariable Double x, @PathVariable Double y, @RequestParam(name = "page", required = false, defaultValue = "0") Integer page) {
        return this.propertyService.findAllByDistance(x, y, page);
    }

    @GetMapping("/{id}")
    public ResponseEntity findById(@PathVariable Long id) {
        return this.propertyService.findById(id);
    }

    @PostMapping
    public ResponseEntity save(@Valid @RequestBody PropertyDTO property, Errors errors) {
        if(errors.hasErrors()) {
            return ResponseEntity.badRequest().body(errors.getAllErrors());
        } else {
            return this.propertyService.save(property);
        }
    }

    @PutMapping("/{id}")
    public ResponseEntity update(@PathVariable Long id, @RequestBody PropertyDTO property) {
        return this.propertyService.update(id, property);
    }

    @DeleteMapping("/{id}")
    public ResponseEntity deleteById(@PathVariable Long id) {
        return this.propertyService.deleteById(id);
    }

    @ExceptionHandler(PropertyException.class)
    public ResponseEntity handlePropertyException(PropertyException e) {
        return ResponseEntity.status(e.getHttpStatus()).body(e.getMessage());
    }

}


Но сам валидатор не отрабатывает. почему?

Main класс:

@EntityScan
@EnableWebMvc
@SpringBootApplication
@EnableJpaRepositories
@EnableTransactionManagement
public class InteractiveMapApplication {

    @Bean(name = "multipartResolver")
    public CommonsMultipartResolver multipartResolver() {
        CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
        multipartResolver.setMaxUploadSize(-1);
        return multipartResolver;
    }

    public static void main(String[] args) {
        SpringApplication.run(InteractiveMapApplication.class, args);
    }

}
18 сен 19, 19:51    [21973595]     Ответить | Цитировать Сообщить модератору
 Re: Не работает Spring Validation в Spring Boot 2  [new]
Tsyklop
Member

Откуда: Украина
Сообщений: 1069
разобрался
18 сен 19, 19:57    [21973598]     Ответить | Цитировать Сообщить модератору
 Re: Не работает Spring Validation в Spring Boot 2  [new]
Molasar
Member

Откуда:
Сообщений: 767
Какая была причина?
Tsyklop
разобрался
19 сен 19, 14:59    [21974343]     Ответить | Цитировать Сообщить модератору
 Re: Не работает Spring Validation в Spring Boot 2  [new]
Tsyklop
Member

Откуда: Украина
Сообщений: 1069
Molasar,

Вместо этого:
@InitBinder
    protected void initBinder(WebDataBinder binder) {
        binder.setValidator(this.propertyValidator);
    }


Сделал следующее:

@InitBinder
    protected void initBinder(WebDataBinder binder) {
        binder.setValidator(new PropertyValidator());
    }


Спринг, почему-то, в поле инжектит вообще левое что-то - не объект моего класса.
19 сен 19, 22:06    [21974743]     Ответить | Цитировать Сообщить модератору
Все форумы / Java Ответить