Проверка запроса на основе аннотации - PullRequest
0 голосов
/ 26 марта 2012

Я пытаюсь проверить числовую переменную в запросе, чего я пытаюсь добиться, чтобы это поле было не нулевым и не числовым.Я хочу, чтобы о нулевых ошибках и ошибках преобразования сообщалось о разных ошибках.

Я пытался использовать org.springframework.format.annotation.NumberFormat

Почему @NumberFormat не имеетсвойство сообщения по умолчанию?Есть ли причина, почему это было пропущено.Теперь мне придется настроить его, так как я не использую комплекты ресурсов сообщений.

public class AddToJobsShortListWSRequest implements Serializable {

@NumberFormat(style = NumberFormat.Style.NUMBER)
@NotNull(message="ASL01")
private Long userDetailId;

controller

public ResponseEntity<String> handlePostRequest(String xmlRequest, String... externalIds) {

    ResponseEntity<String> response = null;
    Set<Enum> enums = new HashSet<Enum>();
    AddToJobsShortListWSRequest addToJobsShortListWSRequest = serializationDeserializationSupport.fromString(xmlRequest, AddToJobsShortListWSRequest.class);

    if(!jsonRequestValidator.validate(AddToJobsShortListWSError.class, enums, addToJobsShortListWSRequest))
    {
        response = getBadRequestErrorResponseEntity(enums);
    }  
    else{
.....
} 

Validator

 private void validate(@SuppressWarnings("rawtypes") Class enumClass, Object object, @SuppressWarnings("rawtypes") Set<Enum> enums) {
    BindException errors = new BindException(object, "object");

    validator.validate(object, errors);

    @SuppressWarnings({"rawtypes"})
    List fieldErrors = errors.getFieldErrors();

    for (int i = 0; i < fieldErrors.size(); i++) {
        if (fieldErrors.get(i) instanceof FieldError) {
            String m = ((FieldError) fieldErrors.get(i)).getDefaultMessage();
            enums.add(Enum.valueOf(enumClass, m));
        }
    }
}

Есть лиЛюбая другая проверка на основе аннотации применимо здесь?Кроме того, каков порядок проверки, который выдается первым, NumberFormat, NotNull?

Заранее спасибо:)

1 Ответ

1 голос
/ 26 марта 2012

Это не было пропущено - проверка стала проще, чем нужно, и Spring поддерживает только пакеты ресурсов сообщений как средство i18n.

Так что для вашего особого случая - он может быть не очень особенным для вас - вам нужна специальная реализация.

Также нет гарантированного заказа на валидации. Каждая проверка должна соответствовать всем случаям, которые она не обрабатывает (поэтому проверка чисел должна работать с пустыми и нулевыми значениями, потому что другие проверки будут проверять это).

Я считаю, что проверка на основе аннотаций полезна для очень простых случаев типа hello-world, таких как @NotNull или @NotEmpty. Для всего остального я предпочитаю средство проверки общего достояния плюс мои собственные аннотации, потому что это позволяет мне определять шаблоны и общие проверки, которые мне нужны для моих приложений, и запускать их в определенном порядке, если потребуется.

...