当前位置: 首页 > news >正文

做网站不会框架广东省建设厅

做网站不会框架,广东省建设厅,怎么进网站,县直门户网站建设管理即将发布的出色的Apache CXF框架3.0版 #xff08;当前处于里程碑2阶段#xff09;带来了许多有趣且有用的功能#xff0c;越来越接近提供完整的JAX-RS 2.0支持。 Bean Validation 1.1的支持是我们中许多人期盼已久的功能之一#xff1a;简单而简洁的模型可为您的REST服务层… 即将发布的出色的Apache CXF框架3.0版 当前处于里程碑2阶段带来了许多有趣且有用的功能越来越接近提供完整的JAX-RS 2.0支持。 Bean Validation 1.1的支持是我们中许多人期盼已久的功能之一简单而简洁的模型可为您的REST服务层添加验证功能。 在这篇博客中我们将研究如何在Apache CXF项目中配置Bean Validation 1.1 并讨论一些有趣的用例。 为了使本篇文章简短而集中我们将不讨论Bean Validation 1.1本身而将更多的精力放在与JAX-RS 2.0资源的集成上我们已经在较早的文章中介绍了一些Bean验证基础知识。 目前 Hibernate Validator是Bean Validation 1.1规范的实际参考实现最新版本为5.1.0.Final 因此它将是我们选择的验证提供程序目前Apache BVal项目仅支持Bean验证1.0 。 值得一提的是 Apache CXF与实现无关并且与Hibernate Validator或Apache BVal一经发布便可以很好地兼容 。 我们将构建一个非常简单的应用程序来管理人员。 我们的模型由一个名为Person的单个类组成。 package com.example.model;import javax.validation.constraints.NotNull;import org.hibernate.validator.constraints.Email;public class Person {NotNull Email private String email;NotNull private String firstName;NotNull private String lastName;public Person() {}public Person( final String email ) {this.email email;}public String getEmail() {return email;}public void setEmail( final String email ) {this.email email;}public String getFirstName() {return firstName;}public String getLastName() {return lastName;}public void setFirstName( final String firstName ) {this.firstName firstName;}public void setLastName( final String lastName ) {this.lastName lastName;} } 从上面的代码片段中我们可以看到Person类对其属性施加了一些限制它们都不应该为null 。 此外 电子邮件属性应包含有效的电子邮件地址将由Hibernate Validator特定的约束Email进行验证。 很简单 现在让我们看一下具有验证约束的JAX-RS 2.0资源。 PeopleRestService类的框架绑定到/ people URL路径如下所示。 package com.example.rs;import java.util.Collection;import javax.inject.Inject; import javax.validation.Valid; import javax.validation.constraints.Min; import javax.validation.constraints.NotNull; import javax.ws.rs.DELETE; import javax.ws.rs.DefaultValue; import javax.ws.rs.FormParam; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo;import org.hibernate.validator.constraints.Length;import com.example.model.Person; import com.example.services.PeopleService;Path( /people ) public class PeopleRestService {Inject private PeopleService peopleService;// REST methods here } 它看起来应该很熟悉没有什么新意。 我们将使用验证约束添加和装饰的第一种方法是getPerson 它将通过其电子邮件地址查找一个人。 Produces( { MediaType.APPLICATION_JSON } ) Path( /{email} ) GET public Valid Person getPerson( Length( min 5, max 255 ) PathParam( email ) final String email ) {return peopleService.getByEmail( email ); } 与传统的JAX-RS 2.0方法声明有几个区别。 首先我们希望电子邮件地址 电子邮件路径参数的长度至少为5个字符但不超过255个字符这由Lengthmin 5max 255注释强加。 其次我们要确保此方法仅返回有效人因此我们使用Valid注释对方法的返回值进行注释。 Valid的作用非常有趣将根据其类 Person 声明的所有验证约束检查该人员的实例。 目前在您的Apache CXF项目中默认情况下Bean Validation 1.1不处于活动状态因此如果您运行应用程序并调用此REST端点则所有验证约束都将被忽略。 好消息是激活Bean Validation 1.1非常容易因为它只需将三个组件添加到您的常规配置中请查看此功能文档以获取更多详细信息和高级配置 JAXRSBeanValidationInInterceptor in-inteceptor对JAX-RS 2.0资源方法的输入参数进行验证 JAXRSBeanValidationOutInterceptor外接收器执行JAX-RS 2.0资源方法返回值的验证 ValidationExceptionMapper异常映射器将验证冲突映射到HTTP状态码 。 根据规范所有输入参数验证冲突都将导致400 Bad Request错误。 分别所有返回值验证冲突导致500内部服务器错误错误。 目前 ValidationExceptionMapper尚未在响应中包括其他信息因为它可能违反应用程序协议但是可以轻松地对其进行扩展以提供有关验证错误的更多详细信息。 AppConfig类展示了使用RuntimeDelegate和JAXRSServerFactoryBean将所有必需的组件连接在一起的方法之一 也支持基于XML的配置。 package com.example.config;import java.util.Arrays;import javax.ws.rs.ext.RuntimeDelegate;import org.apache.cxf.bus.spring.SpringBus; import org.apache.cxf.endpoint.Server; import org.apache.cxf.interceptor.Interceptor; import org.apache.cxf.jaxrs.JAXRSServerFactoryBean; import org.apache.cxf.jaxrs.validation.JAXRSBeanValidationInInterceptor; import org.apache.cxf.jaxrs.validation.JAXRSBeanValidationOutInterceptor; import org.apache.cxf.jaxrs.validation.ValidationExceptionMapper; import org.apache.cxf.message.Message; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.DependsOn;import com.example.rs.JaxRsApiApplication; import com.example.rs.PeopleRestService; import com.example.services.PeopleService; import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;Configuration public class AppConfig { Bean( destroyMethod shutdown )public SpringBus cxf() {return new SpringBus();}Bean DependsOn( cxf )public Server jaxRsServer() {final JAXRSServerFactoryBean factory RuntimeDelegate.getInstance().createEndpoint( jaxRsApiApplication(), JAXRSServerFactoryBean.class );factory.setServiceBeans( Arrays. Object asList( peopleRestService() ) );factory.setAddress( factory.getAddress() );factory.setInInterceptors( Arrays. Interceptor ? extends Message asList( new JAXRSBeanValidationInInterceptor()) );factory.setOutInterceptors( Arrays. Interceptor ? extends Message asList( new JAXRSBeanValidationOutInterceptor() ) );factory.setProviders( Arrays.asList( new ValidationExceptionMapper(), new JacksonJsonProvider() ) );return factory.create();}Bean public JaxRsApiApplication jaxRsApiApplication() {return new JaxRsApiApplication();}Bean public PeopleRestService peopleRestService() {return new PeopleRestService();}Bean public PeopleService peopleService() {return new PeopleService();} } 注入了所有输入/输出拦截器和异常映射器。 太好了让我们构建项目并运行服务器以验证Bean Validation 1.1是否处于活动状态并按预期工作。 mvn clean package java -jar target/jaxrs-2.0-validation-0.0.1-SNAPSHOT.jar 现在如果我们使用短或无效电子邮件地址a b发出REST请求则服务器应返回400 Bad Request 。 让我们验证一下。 curl http://localhost:8080/rest/api/people/ab -iHTTP/1.1 400 Bad Request Date: Wed, 26 Mar 2014 00:11:59 GMT Content-Length: 0 Server: Jetty(9.1.z-SNAPSHOT) 优秀的 完全可以肯定的是我们可以检查服务器控制台的输出并在其中找到ConstraintViolationException类型的验证异常及其堆栈跟踪。 另外最后一行提供了发生问题的详细信息 PeopleRestService.getPerson.arg0长度必须在5到255之间 请注意因为参数名称在编译后当前在JVM上不可用所以将它们替换为占位符例如arg0 arg1 …。 WARNING: Interceptor for {http://rs.example.com/}PeopleRestService has thrown exception, unwinding now javax.validation.ConstraintViolationExceptionat org.apache.cxf.validation.BeanValidationProvider.validateParameters(BeanValidationProvider.java:119)at org.apache.cxf.validation.BeanValidationInInterceptor.handleValidation(BeanValidationInInterceptor.java:59)at org.apache.cxf.validation.AbstractValidationInterceptor.handleMessage(AbstractValidationInterceptor.java:73)at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:240)at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:223)at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:197)at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:149)at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:167)at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:286)at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:211)at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:262)at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:711)at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:552)at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1112)at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:479)at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1046)at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)at org.eclipse.jetty.server.Server.handle(Server.java:462)at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:281)at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:232)at org.eclipse.jetty.io.AbstractConnection$1.run(AbstractConnection.java:505)at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:607)at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:536)at java.lang.Thread.run(Unknown Source)Mar 25, 2014 8:11:59 PM org.apache.cxf.jaxrs.validation.ValidationExceptionMapper toResponse WARNING: PeopleRestService.getPerson.arg0: length must be between 5 and 255 接下来我们将添加另外两种REST方法来演示集合和实际的Response验证。 Produces( { MediaType.APPLICATION_JSON } ) GET public Valid Collection Person getPeople( Min( 1 ) QueryParam( count ) DefaultValue( 1 ) final int count ) {return peopleService.getPeople( count ); } 对象集合上的Valid批注将确保集合中的每个对象都是有效的。 Min1注释还将count参数限制为最小值1 如果未指定查询参数 则将DefaultValue考虑在内。 让我们故意添加没有设置名字和姓氏的人员这样结果集合将包含至少一个不通过验证过程的人员实例。 curl http://localhost:8080/rest/api/people -X POST -id emailab3.com 这样对getPeople REST方法的调用应返回500 Internal Server Error 。 让我们检查情况是否如此。 curl -i http://localhost:8080/rest/api/people?count10HTTP/1.1 500 Server Error Date: Wed, 26 Mar 2014 01:28:58 GMT Content-Length: 0 Server: Jetty(9.1.z-SNAPSHOT) 查看服务器控制台输出就在这里提示错误。 Mar 25, 2014 9:28:58 PM org.apache.cxf.jaxrs.validation.ValidationExceptionMapper toResponse WARNING: PeopleRestService.getPeople.[0].firstName: may not be null Mar 25, 2014 9:28:58 PM org.apache.cxf.jaxrs.validation.ValidationExceptionMapper toResponse WARNING: PeopleRestService.getPeople.[0].lastName: may not be null 最后还有另一个例子这次是通用的Response对象。 Valid Produces( { MediaType.APPLICATION_JSON } ) POST public Response addPerson( Context final UriInfo uriInfo,NotNull Length( min 5, max 255 ) FormParam( email ) final String email, FormParam( firstName ) final String firstName, FormParam( lastName ) final String lastName ) { final Person person peopleService.addPerson( email, firstName, lastName );return Response.created( uriInfo.getRequestUriBuilder().path( email ).build() ).entity( person ).build(); } 最后一个示例有些棘手 Response类是JAX-RS 2.0 API的一部分并且没有定义验证约束。 因此在此类的实例上强加任何验证规则都不会触发任何违规行为。 但是Apache CXF会尽力而为并执行一个简单但有用的技巧代替响应实例将对响应的实体进行验证。 我们可以通过尝试创建一个没有设置姓氏和名字的人来轻松验证这一点预期结果应为500 Internal Server Error 。 curl http://localhost:8080/rest/api/people -X POST -id emailab3.comHTTP/1.1 500 Server Error Date: Wed, 26 Mar 2014 01:13:06 GMT Content-Length: 0 Server: Jetty(9.1.z-SNAPSHOT) 服务器控制台输出更加详细 Mar 25, 2014 9:13:06 PM org.apache.cxf.jaxrs.validation.ValidationExceptionMapper toResponse WARNING: PeopleRestService.addPerson.return value.firstName: may not be null Mar 25, 2014 9:13:06 PM org.apache.cxf.jaxrs.validation.ValidationExceptionMapper toResponse WARNING: PeopleRestService.addPerson.return value.lastName: may not be null 真好 在本博文中我们谈到了Bean验证1.1如何通过提供如此丰富和可扩展的声明式验证支持来使您的Apache CXF项目更好的话题。 绝对可以试试看 完整项目可在GitHub上获得 。 翻译自: https://www.javacodegeeks.com/2014/04/apache-cxf-3-0-jax-rs-2-0-and-bean-validation-1-1-finally-together.html
http://www.sadfv.cn/news/124016/

相关文章:

  • 做搜狗pc网站制作网页如何设置对齐方式
  • 深圳网站建设公司业务招聘做国外衣服的网站有哪些
  • 风格网站建设汕头网站制作多少钱
  • 网站托管公司哪家好网站制作网络推广方案
  • 中国广东手机网站建设南京江北新区核心区范围
  • html5门户网站模板wordpress 漫画网站
  • 网站 ftp初中生可做兼职的网站
  • 家具定制网站wordpress建站阿里云
  • 做视频网站一般多少钱杭州建站
  • 自己做一个网站难不难工作组赴河南协助
  • 网站的排名就是友情链接wordpress 主题开发教程
  • 网站的转化率前端和ui学哪个更好
  • 百度推广公司怎么代理到的从百万到千万 网站怎么优化
  • 北京建设网站合同下载一站式外贸综合服务平台
  • 牛杂网这类网站怎么做的做外贸哪个网站比较好
  • 百度建一个网站多少钱wordpress使用微信登陆
  • 吉 360 网站建设现在房子装修流行什么风格
  • 山东网站定制策划东莞创意网站设计
  • 网站没有域名设置吗设计师网盘
  • 提供邢台网站优化网络设计
  • 徐州高端网站建设天眼查企业查询在线查询
  • 网站导航html源码域名回收网站
  • 企业网站备案代理公司wordpress首页置顶文章
  • 有没有做长图的网站没有网站做优化
  • 信息网站建设方案济南logo设计制作
  • 旅游门户网站系统网络优化seo薪酬
  • 网站设计费用明细我的小程序入口
  • h5网站实例中国人做外贸生意的网站
  • 体贴的聊城网站建设根据一个网站仿做新网站是什么网站
  • 网站域名的意思医院网站开发公司