Как проверить два или более bean-компонента в методе Spring Controller с помощью Hibernate Validator (JSR 303) - PullRequest
0 голосов
/ 01 декабря 2011

У меня есть два класса (Бобы)

public class BeanOne {
  @Min(1)
  private Integer idBeanOne;
  @NotBlank
  private String  nameBeanOne;
  @NotNull
  @Min(1)
  private Integer idOther;
  // ... Getters and Setters
}

public class BeanTwo {
  @Min(1)
  private Integer idBeanTwo;
  @NotBlank
  private String  nameBeanTwo;
  @NotNull
  @Min(1)
  private Integer idOtherTwo;
  // ... Getters and Setters
}

Контроллер Spring

// Method in Controller
@RequestMapping(value = "/name.html", method = RequestMethod.POST)
public @ResponseBody
Map<String, Object> submitInsert(@Valid BeanOne one,
    @Valid BeanTwo two, BindingResult result) {

  if (result.hasErrors()) {
    // Errores
  } else {
    // :D
  }
}

Есть ли способ, которым я могу проверить два или более бобов? Я успешно проверил один компонент, но мне не удалось проверить два или более компонентов. Как я могу это сделать? Спасибо спасибо: D

1 Ответ

0 голосов
/ 05 декабря 2011

После многих попыток проверить два или более bean-компонентов с помощью JSR303, пришли к этому решению.

public class BeanOne {
  @Valid
  private BeanTwo beanTwo;
  // other beans to validate
  @Valid
  private BeanN beanN;

  @Min(1)
  private Integer idBeanOne;
  @NotBlank
  private String  nameBeanOne;
  @NotNull
  @Min(1)
  private Integer idOther;
  // ... Getters and Setters
}

public class BeanTwo {
  @Min(1)
  private Integer idBeanTwo;
  @NotBlank
  private String  nameBeanTwo;
  @NotNull
  @Min(1)
  private Integer idOtherTwo;
  // ... Getters and Setters
}

// Контроллер Spring

@Controller
public class XController {

  @Autowired
  private Validator validator;

  @RequestMapping(value = "/name.html", method = RequestMethod.POST)
  public @ResponseBody Map<String, Object> 
     submitInsert(BeanOne beanOne, BeanTwo beanTwo, BindingResult  result) {

    beanOne.setBeanTwo(beanTwo);
    // beanOne.setBeabN(beanN);
    validator.validate(beanOne, result);

    if (result.hasErrors()) {
      // Errores
    } else {
      // :D
    }
  }
  // more code ...
}

Но теперь у меня есть другоепроблема: (

У меня есть этот файл Messages.properties

typeMismatch.java.lang.Integer = Must specify an integer value. 
typeMismatch.java.lang.Long = Must specify an integer value. 
typeMismatch.java.lang.Float = Must specify a decimal value. 
typeMismatch.java.lang.Double=Must specify a decimal value.

Этот файл помогает мне перехватывать исключения, когда поле ожидает число, а пользователь вводит текст

Это прекрасно работает для первого компонента (BeanOne), но не для вложенных компонентов (BeanTwo, BeanN)

Надеюсь, они могут мне помочь: D

спасибо

...