Проверка тела запроса в загрузочном приложении Spring - PullRequest
0 голосов
/ 02 мая 2020

Я хочу, чтобы мой REST API генерировал исключение всякий раз, когда существует и несоответствие типов параметров. Ниже приведен мой объект запроса.

public class MyReqDto {
    @NotNull
    @Pattern(regexp = "[^a-zA-Z0-9]", message = "Invalid characters found in subscriberType")
    private String subscriberType;

    @NotNull
    @Pattern(regexp = "^[a-zA-Z0-9]", message = "Invalid characters found in caseId")
    private String caseId;

В указанном выше случае исключение должно создаваться всякий раз, когда запрос нарушает это строковое требование (предоставление целочисленного значения для subscriberType). Также мне нужно проверить их по недопустимым символам, таким как *, -, <,> et c. Для этого я использовал аннотацию @Pattern.

Мой контроллер выглядит следующим образом.

@Controller
public class MyController {

    @RequestMapping(value = "/my-controller/traceId/{Trace_ID}", method = RequestMethod.POST, produces =
            "application/json")
        public ResponseEntity<Object> startWork(@PathVariable Optional<String> Trace_ID,
                @Valid @RequestBody MyReqDto myReqDto)
            throws Exception {

Я использую аннотацию @Valid и включил зависимость maven для hibernate-validator

<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-validator</artifactId>
  <version>4.0.2.GA</version>
</dependency>

<dependency>
  <groupId>javax.validation</groupId>
  <artifactId>validation-api</artifactId>
  <version>1.0.0.GA</version>
</dependency>

Но проблема в том, что он не проверяет мой ввод и не принимает целочисленные значения для subscriberType и caseId.

Любая помощь по этому вопросу высоко ценится.

Ответы [ 2 ]

1 голос
/ 02 мая 2020

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

Шаблоны регулярных выражений

  • [A-Za-z ]* для сопоставления букв и пробелов.

  • ".*[^0-9].*" чтобы соответствовать номерам

https://www.vogella.com/tutorials/JavaRegularExpressions/article.html

0 голосов
/ 02 мая 2020

Проблема в проверке шаблона была в моем регулярном выражении. Следующее решило проблему.

public class MyReqDto {
    @NotNull
    @Pattern(regexp = "^[a-zA-Z0-9]", message = "Invalid characters found in subscriberType")
    private String subscriberType;

    @NotNull
    @Pattern(regexp = "^[a-zA-Z0-9]", message = "Invalid characters found in caseId")
    private String caseId;

Я заметил, что по умолчанию объявление параметра тела запроса в виде строки и предоставление ему целочисленного значения работает нормально, без исключений. Однако если мы объявим параметр тела запроса как целое число и передадим ему строковое значение, оно выдаст исключение.

Просто caseId = "123" и caseId = 123 имеют тот же эффект в моем теле запроса, поскольку caseId объявлен как строка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...