Spring boot - проверка класса не работает в REST API - PullRequest
0 голосов
/ 06 мая 2020

У меня есть следующий REST API:

@ResponseBody
    @PostMapping(path = "/configureSegment")
    public ResponseEntity<ResultData> configureSegment(@RequestParam() String segment,
                                                       @RequestBody @Valid CloudSegmentConfig segmentConfig
                                                        )  {

CloudSegmentConfig:

@JsonProperty(value="txConfig", required = true)
    @NotNull(message="Please provide a valid txConfig")
    TelemetryConfig telemetryConfig;
    @JsonProperty(value="rxConfig")
    ExternalSourcePpdkConfig externalSourcePpdkConfig = new ExternalSourcePpdkConfig(true);

TelemetryConfig:

public class TelemetryConfig {

    static Gson gson = new Gson();

    @JsonProperty(value="location", required = true)
    @Valid
    @NotNull(message="Please provide a valid location")
    Location location;

    @Valid
    @JsonProperty(value="isEnabled", required = true)
    @NotNull(message="Please provide a valid isEnabled")
    Boolean isEnabled;

Расположение:

static public enum Location {
        US("usa"),
        EU("europe"),
        CANADA("canada"),
        ASIA("asia");
        private String name;

        private Location(String s) {
            this.name = s;
        }
        private String getName() {
            return this.name;
        }
    }

Когда я пытаюсь отправить следующее JSON:

{
    "txConfig": {
        "location": "asdsad"
    }
}

API возвращает пустой ответ 400 неверный запрос, хотя я ожидаю, что он подтвердит, что местоположение является одним из ENUM класса . Я также ожидаю, что он проверит параметр isEnable, хотя это не так, хотя я добавил к нему все возможные аннотации ..

Есть идеи?

1 Ответ

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

Используйте аннотацию @Valid для TelemetryConfig telemetryConfig и не нужно использовать @Valid в поле класса TelemetryConfig.

@Valid
TelemetryConfig telemetryConfig;

А для проверки подмножества перечислений вы можете создать валидатор клиента с аннотацией и используй это. Хорошее решение c об этом Проверка подмножества Enum

...