Проверка с помощью Spring, что логический элемент приходит в явном виде - PullRequest
0 голосов
/ 13 января 2020

Мы получили эту конечную точку REST, в которой одно из полей сопоставлено с экземпляром Boolean (класс-оболочка). Мы используем логическое значение вместо логического, потому что проектное решение, поэтому это не подлежит обсуждению.

Это логическое значение является обязательным, и оно должно быть указано отправителем ("whatValue": "" должно вернуть 400 ошибка), но при достижении конечной точки значение автоматически преобразуется в правильное ложное значение.

Итак, вопрос: можно ли это сделать? Разве мы не понимаем контракт использования «логического» объекта вместо примитива?

РЕДАКТИРОВАТЬ: просто чтобы уточнить, мы уже проверяем "whatValue": null, и значение может быть либо true, либо false, поэтому, насколько я знаю, ни @NotNull, ни @ AssertTrue / False не могут быть используется здесь.

Ответы [ 2 ]

0 голосов
/ 14 января 2020

Я кодировал ваш сценарий следующим образом, и он был в порядке!

Пожалуйста, исправьте меня, если мое понимание (из вашего сценария) неверно.

Создать DTO

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class TestDto {

@NotNull
Boolean testValue;

//getter and setter

}

Создать конечную точку

@RestController
public class testController {

@RequestMapping(value = "/test", method = RequestMethod.POST)
public void accountTrades(@RequestBody @Valid TestDto testDto) {

    System.out.println(testDto.getTestValue());

  }

}

Используя Почтальон, когда я отправляю testValue: "", он выдает исключение notnull, это означает, что сервер получил null , и нет преобразования null в false . (Работало правильно!)

Ответ сервера выглядит следующим образом

enter image description here

0 голосов
/ 14 января 2020

Если вы хотите проверить тип объекта Boolean, вы должны использовать @ NotNull

Здесь - вопрос, по которому он уже задавался. Я использую @NotNull, если логическое значение является обязательным для установки ans @ AssertTrue / false, чтобы убедиться, что входящее значение имеет указанное c состояние. Надеюсь, это поможет

...