Javax.Validation - 値がない場合はnullが、検証が可能

Itsik Mauyhas:

私はjavaxのを使用していますValidation.constraintsし、私は入力を検証するが、それはnullにすることができ、私のPOJOにしたいです:

public class somePOJO{
    @NotNull
    @Size(min =2, max=50)
    @Pattern(regexp="^[A-Za-z \\s\\-]*$")
    private String country;

    @Size(min =2,max=50)
    @Pattern(regexp="^[A-Za-z \\s\\-]*$")
    private String state;
    //gettes, setters.....

}

私が検証するstateと、たとえば@Pattern@sizeだけでなく、それならばnull

使用してそれを行うための方法があり、カスタム注釈は

ygor:

あなたは、最新の春ブーツ、2.1.0で例えば期待通りこれは、箱から出して動作します。

あなたは春ブーツのどのバージョンを使用していますか?

ここではPOJO(私は不変クラスを促進することをしてください通告、)のフルバージョンは以下のとおりです。

package sk.ygor.stackoverflow.q53207105;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;

public class SomePOJO {

    @NotNull
    @Size(min =2, max=50)
    @Pattern(regexp="^[A-Za-z \\s\\-]*$")
    private final String country;

    @Size(min =2,max=50)
    @Pattern(regexp="^[A-Za-z \\s\\-]*$")
    private final String state;

    public SomePOJO(String country, String state) {
        this.country = country;
        this.state = state;
    }

    public String getCountry() {
        return country;
    }

    public String getState() {
        return state;
    }

}

そして、コントローラのフルバージョン:

package sk.ygor.stackoverflow.q53207105;

import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.Valid;

@RestController
public class ExampleController {

    @RequestMapping(path = "/q53207105", method = RequestMethod.POST)
    public void test(@Valid @RequestBody SomePOJO somePOJO) {
        System.out.println("somePOJO.getCountry() = " + somePOJO.getCountry());
        System.out.println("somePOJO.getState() = " + somePOJO.getState());
    }

}

呼び出しにhttp:// localhost:8080 / q53207105と:

{
    "country": "USA",
    "state": "California" 
}

版画:

somePOJO.getCountry() = USA
somePOJO.getState() = California

呼び出しにhttp:// localhost:8080 / q53207105と:

{
    "country": "USA",
}

版画:

somePOJO.getCountry() = USA
somePOJO.getState() = null

あなたは私にあなたの春のブートバージョンを教えている場合、私はもっと役立つかもしれません。

おすすめ

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