{"id":6741,"date":"2022-07-29T17:03:09","date_gmt":"2022-07-29T09:03:09","guid":{"rendered":"http:\/\/123.57.164.21\/?p=6741"},"modified":"2022-07-29T17:03:09","modified_gmt":"2022-07-29T09:03:09","slug":"springboot-constraint%e8%87%aa%e5%ae%9a%e4%b9%89%e6%b3%a8%e8%a7%a3","status":"publish","type":"post","link":"https:\/\/92it.top\/?p=6741","title":{"rendered":"SpringBoot @Constraint\u81ea\u5b9a\u4e49\u6ce8\u89e3"},"content":{"rendered":"\n<p>SpringBoot\u6709\u56db\u4e2a\u6ce8\u89e3\u7528\u6765\u6ce8\u89e3\u6ce8\u89e3\u7684<code>@Retention\uff0c@Target\uff0c@Document\uff0c@Inherited<\/code><\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<ul><li>\u6ce8\u89e3\u4fdd\u7559\u4f4d\u7f6e\u7684\uff1a<code>@Retention<\/code><\/li><\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/\u6ce8\u89e3\u4ec5\u5b58\u5728\u4e8e\u6e90\u7801\u4e2d\uff0c\u5728class\u5b57\u8282\u7801\u6587\u4ef6\u4e2d\u4e0d\u5305\u542b\n@Retention(RetentionPolicy.SOURCE)\n\/\/ \u9ed8\u8ba4\u7684\u4fdd\u7559\u7b56\u7565\uff0c\u6ce8\u89e3\u4f1a\u5728class\u5b57\u8282\u7801\u6587\u4ef6\u4e2d\u5b58\u5728\uff0c\u4f46\u8fd0\u884c\u65f6\u65e0\u6cd5\u83b7\u5f97\n@Retention(RetentionPolicy.CLASS)    \n\/\/ \u6ce8\u89e3\u4f1a\u5728class\u5b57\u8282\u7801\u6587\u4ef6\u4e2d\u5b58\u5728\uff0c\u5728\u8fd0\u884c\u65f6\u53ef\u4ee5\u901a\u8fc7\u53cd\u5c04\u83b7\u53d6\u5230\n@Retention(RetentionPolicy.RUNTIME)  \n<\/pre>\n\n\n\n<ul><li>\u6ce8\u89e3\u7684\u4f5c\u7528\u76ee\u6807\uff1a<code>@Target<\/code><\/li><\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/\u63a5\u53e3\u3001\u7c7b\u3001\u679a\u4e3e\u3001\u6ce8\u89e3\n@Target(ElementType.TYPE) \n\/\/\u5b57\u6bb5\u3001\u679a\u4e3e\u7684\u5e38\u91cf\n@Target(ElementType.FIELD)\n\/\/\u65b9\u6cd5\n@Target(ElementType.METHOD)\n\/\/\u65b9\u6cd5\u53c2\u6570\n@Target(ElementType.PARAMETER)\n\/\/\u6784\u9020\u51fd\u6570\n@Target(ElementType.CONSTRUCTOR) \n\/\/\u5c40\u90e8\u53d8\u91cf\n@Target(ElementType.LOCAL_VARIABLE)\n\/\/\u6ce8\u89e3\n@Target(ElementType.ANNOTATION_TYPE)\n\/\/\u5305   \n@Target(ElementType.PACKAGE)\n<\/pre>\n\n\n\n<ul><li>\u5c06\u6ce8\u89e3\u5305\u542b\u5728javadoc\u4e2d<code>@Document<\/code><\/li><li>\u6ce8\u89e3\u53ef\u4ee5\u88ab\u7ee7\u627f<code>@Inherited<\/code><\/li><\/ul>\n\n\n\n<p><strong>\u81ea\u5b9a\u4e49\u6ce8\u89e3@Constraint<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p>\u5982\u679c\u60f3\u5bf9\u63a5\u53e3\u53c2\u6570\u8fdb\u884c\u6821\u9a8c\uff0c\u5fc5\u987b\u4f7f\u7528@valid\u624d\u80fd\u4f7f\u6ce8\u89e3\u751f\u6548<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@GetMapping(\"\/check\")\npublic String test02(@Valid @RequestBody Parm s){\n    return s.getNameS();\n}<\/pre>\n\n\n\n<p>\u4e0b\u9762\u5c31\u662f\u5982\u4f55\u5177\u4f53\u5b8c\u6210\u4e00\u4e2a\u81ea\u5b9a\u4e49\u6ce8\u89e3\uff0c\u9996\u5148\u662f\u5b9a\u4e49\u4e00\u4e2a@interface\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@Constraint(validatedBy= {CheckNameValidator.class})\n@Retention(RetentionPolicy.RUNTIME)\n@Target(ElementType.FIELD)\npublic @interface CheckName {\n    String message();\n    Class&lt;?>[] groups() default { };\n\n    Class&lt;? extends Payload>[] payload() default { };\n}\n<\/pre>\n\n\n\n<p>\u5176\u4e2d\uff0cCheckName\u4e3a\u6ce8\u89e3\u540d\uff0cvalidatedBy= {CheckNameValidator.class}\u7684CheckNameValidator\u662f\u771f\u6b63\u8fdb\u884c\u6821\u9a8c\u65b9\u6cd5\u7684\u7c7b\uff0cmessage\u53ef\u81ea\u5b9a\u4e49\u4e2a\u6570\u548c\u5c5e\u6027\uff0c\u4f5c\u4e3a\u6ce8\u89e3\u4f20\u53c2\u7684\u53c2\u6570\u3002<br><span class=\"has-inline-color has-vivid-red-color\">\u6ce8\u610f\uff0c\u8fd9\u4e24\u4e2a\u5fc5\u987b\u6709\uff0c\u5426\u5219\u62a5\u9519\uff1a<\/span><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Class&lt;?>[] groups() default { };\n\nClass&lt;? extends Payload>[] payload() default { };<\/pre>\n\n\n\n<p>\u771f\u6b63\u6821\u9a8c\u7684\u7c7b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class CheckNameValidator implements ConstraintValidator&lt;CheckName, String> {\n    String message;\n\n    @Override\n    public void initialize(CheckName constraintAnnotation) {\n        this.message = constraintAnnotation.message();\n    }\n\n    @Override\n    public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {\n        if (s.equals(\"a\")) {\n            System.out.println(message);\n            return true;\n        }\n        return false;\n    }\n\n<\/pre>\n\n\n\n<p>\u9700\u8981<span class=\"has-inline-color has-vivid-red-color\">\u7ee7\u627fConstraintValidator<\/span>&lt;\u6ce8\u89e3\u540d\uff0c\u6821\u9a8c\u7684Object><br>\u6709\u4e24\u4e2a\u65b9\u6cd5<span class=\"has-inline-color has-vivid-red-color\">initialize()<\/span>\u548c<span class=\"has-inline-color has-vivid-red-color\">isValid()<\/span><br>\u65b9\u6cd5<span class=\"has-inline-color has-vivid-red-color\">initialize()<\/span>\u4e0d\u9700\u8981\u4e00\u5b9a\u6709\uff0c\u4f7f\u7528\u53ef\u7528\u6765\u5bf9\u6ce8\u89e3\u5b9a\u4e49\u7684\u53c2\u6570\u8fdb\u884c\u521d\u59cb\u5316\u7ed9isValid()\u65b9\u6cd5\u8fdb\u884c\u4f7f\u7528\u3002<br>\u65b9\u6cd5<span class=\"has-inline-color has-vivid-red-color\">isValid()<\/span>\u5fc5\u987b\u5b9e\u73b0\uff0c\u662f\u6821\u9a8c\u903b\u8f91\u6240\u5728\u7684\u4f4d\u7f6e\u3002<br><\/p>\n\n\n\n<p>\u6700\u540e\u662f\u6ce8\u89e3\u7684\u4f4d\u7f6e\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class Parm {\n\n    @CheckName(message = \"message\")\n    private String NameS;\n\n    public String getNameS() {\n        return NameS;\n    }\n\n    public void setNameS(String name) {\n        NameS = name;\n    }\n}\n<\/pre>\n\n\n\n<p>\u6ce8\u89e3\u62ec\u53f7\u91cc\u7684\u662f\u6ce8\u89e3\u4e2d\u5b9a\u4e49\u7684\u53c2\u6570\uff0c\u53ef\u81ea\u5b9a\u4e49<\/p>\n","protected":false},"excerpt":{"rendered":"<p>SpringBoot\u6709\u56db\u4e2a\u6ce8\u89e3\u7528\u6765\u6ce8\u89e3\u6ce8\u89e3\u7684@Retention\uff0c@Target\uff0c@Document\uff0c@Inh [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[26,27],"tags":[],"_links":{"self":[{"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/posts\/6741"}],"collection":[{"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/92it.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=6741"}],"version-history":[{"count":5,"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/posts\/6741\/revisions"}],"predecessor-version":[{"id":6746,"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/posts\/6741\/revisions\/6746"}],"wp:attachment":[{"href":"https:\/\/92it.top\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6741"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/92it.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=6741"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/92it.top\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=6741"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}