どのように検証@NotBlankのjavaxで直接、単純な文字列パラメータのために?

Shpen:

私が検証するGET/ POSTと春ブートコントローラクラスの要求javax.validation-api注釈を。

クラスの場合@Valid@NotBlank完全にそのクラスの仕事の属性のため。

予想通り、次は動作します:

public class Registration {
    @NotBlank
    private String name;
}

public ResponseEntity registration(@Valid @RequestBody Registration registration) {}

だから今、私は唯一のパラメータとして単一の文字列を持って、それを検証したいと思います。

これを可能にIST?

予想通り、次は動作しません(検証は何もしません):

public ResponseEntity registration(@Valid @NotBlank String password) {}

このようなAの簡単な要件のように思えるが、私は、インターネット上またはStackOverflowの上で何かを見つけることができませんでした。


再現のために私はMWE(javaの10、Gradleのプロジェクト)を作成しました:

プロジェクト通話開始後localhost:8080/registration?test=ポストマンとの例えばPOSTとを。パラメータ「テスト」は空になりますが、この方法にもかかわらずが@NotBlank入力されます。

POSTコールはlocalhost:8080/container期待通りに失敗します。

MweController.java

import javax.validation.constraints.*;

import org.springframework.http.*;
import org.springframework.web.bind.annotation.*;

@RestController
public class MweController {

    @CrossOrigin(origins = "http://localhost:3000")
    @PostMapping(value = "/registration")
    public ResponseEntity registration(@NotNull @NotBlank @NotEmpty String test) {
        System.out.println("Parameter: " + test);
        // This should return Bad Request but doesn't!
        return new ResponseEntity(HttpStatus.OK);
    }

    @CrossOrigin(origins = "http://localhost:3000")
    @PostMapping(value = "/container")
    public ResponseEntity container(@Valid Container test) {
        System.out.println("Parameter: " + test);
        // This returns Bad Request as expected
        return new ResponseEntity(HttpStatus.OK);
    }

    class Container {
        public Container(String test){
            this.test = test;
        }

        @NotBlank
        private String test;
    }

}

MweApplication.java

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MweApplication {

    public static void main(String[] args) {
        SpringApplication.run(MweApplication.class, args);
    }
}

build.gradle

buildscript {
    ext {
        springBootVersion = '2.1.0.M2'
    }
    repositories {
        mavenCentral()
        maven { url "https://repo.spring.io/snapshot" }
        maven { url "https://repo.spring.io/milestone" }
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

group = 'com.mwe'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 10

repositories {
    mavenCentral()
    maven { url "https://repo.spring.io/snapshot" }
    maven { url "https://repo.spring.io/milestone" }
}


dependencies {
    compile('org.springframework.boot:spring-boot-starter-webflux')
}
Arpitアガルワル:

あなたがあなたのクラスを注釈を付けましたの@Validated

例えば:

@Validated
public class Controller {

   public ResponseEntity registration(@Valid @NotBlank String password) {}
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=213618&siteId=1