<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 使用 Ajax 的 JAX-RS 自定義驗證示例 > 原文: [https://howtodoinjava.com/resteasy/jax-rs-custom-validation-example-using-ajax/](https://howtodoinjava.com/resteasy/jax-rs-custom-validation-example-using-ajax/) 在此示例中,我將顯示[**`ValidatorAdapter`**](http://docs.jboss.org/resteasy/docs/2.3.1.GA/javadocs/org/jboss/resteasy/spi/validation/ValidatorAdapter.html "ValidatorAdapter")與[`@ValidateRequest`](http://docs.jboss.org/resteasy/docs/2.3.0.GA/javadocs/org/jboss/resteasy/spi/validation/ValidateRequest.html "ValidateRequest")注解的結合使用。 為了從 UI 發送請求,我將使用 ajax。 您可以在項目中使用表單提交。 在這種情況下,您將需要`@FormParam`注解來捕獲請求參數。 在下面的功能截圖中,我們將在本教程中實現。 ![JAX-RS + Ajax Validation example](https://img.kancloud.cn/9e/d1/9ed15c8c62a66ab76d9eea7c499d49b3_426x282.png) JAX-RS + Ajax 驗證示例 讓我們逐步構建此示例教程。 **步驟 1)使用 Maven 創建一個 Eclipse Web 項目** ```java C:LokeshSetupworkspaceRESTfulValidation>mvn archetype:generate -DgroupId=com.howtodoinjava -DartifactId=RESTfulValidation -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false mvn eclipse:eclipse -Dwtpversion=2.0 ``` **步驟 2)更新`pom.xml`文件中的運行時依賴項** ```java <!-- core library --> <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-jaxrs</artifactId> <version>2.3.1.GA</version> </dependency> <dependency> <groupId>net.sf.scannotation</groupId> <artifactId>scannotation</artifactId> <version>1.0.2</version> </dependency> <!-- JAXB provider --> <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-jaxb-provider</artifactId> <version>2.3.1.GA</version> </dependency> ``` **步驟 3)使用路徑映射信息更新`web.xml`** ```java <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>Archetype Created Web Application</display-name> <!-- Auto scan REST service --> <context-param> <param-name>resteasy.scan</param-name> <param-value>true</param-value> </context-param> <listener> <listener-class> org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap </listener-class> </listener> <servlet> <servlet-name>resteasy-servlet</servlet-name> <servlet-class> org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher </servlet-class> </servlet> <servlet-mapping> <servlet-name>resteasy-servlet</servlet-name> <url-pattern>/rest/*</url-pattern> </servlet-mapping> </web-app> ``` **步驟 4)創建將在其上執行驗證的 RESTful API** 該 API 在以下級別可以具有`@ValidateRequest`注解: * **方法級別**:它將啟用對該特定方法的驗證。 * **類級別**:它將在該類內的所有方法上啟用驗證。 我在類上使用此注解。 ```java package com.howtodoinjava.rest; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.QueryParam; import javax.ws.rs.core.Response; import org.jboss.resteasy.spi.validation.ValidateRequest; @Path("/rest") @ValidateRequest public class UserService { @Path("/users") @POST public Response addUser(@QueryParam("firstName") String firstName, @QueryParam("lastName") String lastName) { System.out.println("User added !!"); return Response.ok().build(); } } ``` **注意**:如果已在類級別使用`@ValidateRequest`注解,并且想要禁用某些 API 的驗證,則可以使用`@DoNotValidateRequest`注解。 **步驟 5)創建您的自定義驗證器,該實現器將實現`ValidatorAdapter`類** `ValidatorAdapter`的實現在應用啟動時由 RESTEasy 自動掃描,并在上下文中注冊。 ```java package com.howtodoinjava.validator; import java.lang.reflect.Method; import org.jboss.resteasy.spi.BadRequestException; import org.jboss.resteasy.spi.validation.ValidatorAdapter; public class CommonValidator implements ValidatorAdapter { @Override public void applyValidation(Object resource, Method invokedMethod, Object[] args) { /*ValidateRequest classLevelValidateRequest = FindAnnotation.findAnnotation(invokedMethod.getDeclaringClass() .getAnnotations(), ValidateRequest.class); ValidateRequest methodLevelValidateRequest = FindAnnotation.findAnnotation(invokedMethod.getAnnotations(), ValidateRequest.class); boolean applyValidation = (classLevelValidateRequest != null || methodLevelValidateRequest != null);*/ if( invokedMethod.getName().equalsIgnoreCase("addUser")) { if(args == null || args.length != 2) { throw new BadRequestException("Fill all fields"); } if(((String) args[0]).isEmpty()) { throw new BadRequestException("Fill first name"); } else if(((String) args[1]).isEmpty()) { throw new BadRequestException("Fill last name"); } } } } ``` **步驟 6)修改`index.jsp`文件以與 REST API 交互** 該 jsp 文件將包含帶有兩個輸入框的 HTML 表單。 這些文本框將接受用戶的名字和姓氏。 我們正在嘗試在此表單上啟用 ajax 支持的驗證功能。 ```java <html> <head> <script lang="javascript"> var xmlhttp; function postRequest(url, cfunc) { if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp = new XMLHttpRequest(); } else {// code for IE6, IE5 xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange = cfunc; xmlhttp.open("POST", url, true); xmlhttp.send(); } function submitForm() { postRequest( "./rest/users?firstName="+document.getElementById("firstName").value+"&lastName="+document.getElementById("lastName").value, function() { if (xmlhttp.readyState == 4 && xmlhttp.status != 200) { //alert(xmlhttp.responseText); document.getElementById("error").innerHTML = "<h2><span style='color:red'>Fill all fields !!</span></h2>"; } }); } </script> </head> <body> <h1>JAX-RS Custom Validation</h1> <div id="error"></div> <form onclick="submitForm()" method="post"> <p> First Name : <input type="text" name="firstName" id="firstName"/> </p> <p> LastName : <input type="text" name="lastName" id="lastName"/> </p> <input type="button" value="Add User" /> </form> By : <b>https://www.howtodoinjava.com</b> </body> </html> ``` **步驟 7)測試應用** 嘗試提交項目或半填表時,您會收到驗證錯誤,如帖子開頭的屏幕截圖所示。 另外,在服務器日志中,您可以驗證錯誤記錄為: ```java SEVERE: Failed executing POST /rest/users org.jboss.resteasy.spi.BadRequestException: Fill first name at com.howtodoinjava.validator.CommonValidator.applyValidation(CommonValidator.java:30) at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:150) at org.jboss.resteasy.core.ResourceMethod.invokeOnTarget(ResourceMethod.java:257) at org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:222) at org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:211) at org.jboss.resteasy.core.SynchronousDispatcher.getResponse(SynchronousDispatcher.java:525) at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:502) at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:119) at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:208) at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:55) at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:50) at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) ``` **學習愉快!**
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看