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

上虞宇普电器网站建设求个网站2020急急急

上虞宇普电器网站建设,求个网站2020急急急,宝安网页,网站的价值与网站建设的价格PATCH方法是最不受欢迎的HTTP方法之一#xff0c;因为直到最近才真正没有一种标准的PATCH格式。 一段时间以来#xff0c;它已经针对JSON进行了标准化#xff0c;因此有很多库可以为您完成繁重的工作。 出于本博客的目的#xff0c;我将使用json-patch#xff0c;尽管可以… PATCH方法是最不受欢迎的HTTP方法之一因为直到最近才真正没有一种标准的PATCH格式。 一段时间以来它已经针对JSON进行了标准化因此有很多库可以为您完成繁重的工作。 出于本博客的目的我将使用json-patch尽管可以很容易地将这种特定的实现方式适应您选择的补丁库。 每个正常值可以让资源和Bean类不受干扰。 在此示例代码中我们有一个简单的资源该资源知道如何返回原始对象并且该资源允许您执行PATCH方法。 请注意patch方法仅接受bean对象这是因为我们需要做一些魔术才能对补丁进行预处理。 import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType;Path(service) Produces(MediaType.APPLICATION_JSON) Consumes(MediaType.APPLICATION_JSON) public class Service {GETpublic Bean get() {return new Bean(true);}PATCHConsumes(application/json-patchjson)public Bean patch(Bean input) {System.out.println(input.getMessage() input.getTitle());return input;}}import java.util.ArrayList; import java.util.List;public class Bean {private String title title;private String message message;private ListString list new ArrayListString();public Bean() {this(false);}public Bean(boolean init) {if (init) {title title;message message;list.add(one);list.add(two);}}public void setList(List list) {this.list list;}public List getList() {return list;}public void setTitle(String title) {this.title title;}public String getTitle() {return title;}public void setMessage(String message) {this.message message;}public String getMessage() {return message;}} 因此对于这个示例我们必须创建PATCH批注幸运的是JAX-RS为此目的包含了一个扩展元批注。 我们还将使用NameBinding因为此示例使用的是JAX-RS 2.0因此我们可以NameBinding连接过滤器。 import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;import javax.ws.rs.HttpMethod; import javax.ws.rs.NameBinding;Target({ ElementType.METHOD, ElementType.TYPE }) Retention(RetentionPolicy.RUNTIME) HttpMethod(PATCH) Documented NameBinding public interface PATCH { } 因此这里是ReaderInterceptor的实现该实现将处理传入的流并将其替换为修补版本。 请注意还使用PATCH对该类进行了注释以使NamedBinding魔术起作用并且还缺少许多错误处理因为这是一个简单的POC。 import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper;import com.github.fge.jsonpatch.JsonPatch; import com.github.fge.jsonpatch.JsonPatchException;import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException;import java.lang.annotation.Annotation; import java.lang.reflect.Method;import javax.ws.rs.GET; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MultivaluedHashMap; import javax.ws.rs.core.UriInfo; import javax.ws.rs.ext.MessageBodyWriter; import javax.ws.rs.ext.Provider; import javax.ws.rs.ext.ReaderInterceptor; import javax.ws.rs.ext.ReaderInterceptorContext;import org.glassfish.jersey.message.MessageBodyWorkers;Provider PATCH public class PatchReader implements ReaderInterceptor {private UriInfo info;private MessageBodyWorkers workers;Contextpublic void setInfo(UriInfo info) {this.info info;}Contextpublic void setWorkers(MessageBodyWorkers workers) {this.workers workers;}Overridepublic Object aroundReadFrom(ReaderInterceptorContext readerInterceptorContext) throws IOException,WebApplicationException {// Get the resource we are being called on, // and find the GET methodObject resource info.getMatchedResources().get(0);Method found null;for (Method next : resource.getClass().getMethods()) {if (next.getAnnotation(GET.class) ! null) {found next;break;}}if (found ! null) {// Invoke the get method to get the state we are trying to patch//Object bean;try {bean found.invoke(resource);} catch (Exception e) {throw new WebApplicationException(e);}// Convert this object to a an aray of bytes ByteArrayOutputStream baos new ByteArrayOutputStream();MessageBodyWriter? super Object bodyWriter workers.getMessageBodyWriter(Object.class, bean.getClass(), new Annotation[0], MediaType.APPLICATION_JSON_TYPE);bodyWriter.writeTo(bean, bean.getClass(), bean.getClass(), new Annotation[0], MediaType.APPLICATION_JSON_TYPE,new MultivaluedHashMapString, Object(), baos);// Use the Jackson 2.x classes to convert both the incoming patch // and the current state of the object into a JsonNode / JsonPatchObjectMapper mapper new ObjectMapper();JsonNode serverState mapper.readValue(baos.toByteArray(), JsonNode.class);JsonNode patchAsNode mapper.readValue(readerInterceptorContext.getInputStream(), JsonNode.class);JsonPatch patch JsonPatch.fromJson(patchAsNode);try {// Apply the patchJsonNode result patch.apply(serverState);// Stream the result modify the stream on the readerInterceptorByteArrayOutputStream resultAsByteArray new ByteArrayOutputStream();mapper.writeValue(resultAsByteArray, result);readerInterceptorContext.setInputStream(new ByteArrayInputStream(resultAsByteArray.toByteArray()));// Pass control back to the Jersey codereturn readerInterceptorContext.proceed();} catch (JsonPatchException e) {throw new WebApplicationException(Response.status(500).type(text/plain).entity(e.getMessage()).build());}} else {throw new IllegalArgumentException(No matching GET method on resource);}} } 因此一旦部署完成就可以开始处理数据因此原始消息是 {list : [one,two],message : message,title : title } 因此如果应用以下修补程序则返回的结果是 [{op : replace,path : /message,value : otherMessage},{op : add,path : /list/-,value : three} ]{list : [one,two,three],message : otherMessage,title : title } 此示例说明遵循简单的编码模式并使用简单的注释将PATCH支持添加到您的类中相对比较简单。 这样由于实现仅可以委托给您现有的PUT方法因此PATCH支持变得微不足道。 更新 Jersey团队的Mirsolav Fuksa提醒我为了使此实现符合PATCH RFC它应在客户端执行OPTIONS请求时提供Accept-Patch标头。 您可以使用简单的CotnainerResponseFilter来做到这一点 import java.io.IOException;import java.util.Collections;import javax.ws.rs.container.ContainerRequestContext; import javax.ws.rs.container.ContainerResponseContext; import javax.ws.rs.container.ContainerResponseFilter; import javax.ws.rs.ext.Provider;Provider public class OptionsAcceptHeader implements ContainerResponseFilter {Overridepublic void filter(ContainerRequestContext requestContext,ContainerResponseContext responseContext) throws IOException {if (OPTIONS.equals(requestContext.getMethod())) {if (responseContext.getHeaderString(Accept-Patch)null) {responseContext.getHeaders().put(Accept-Patch, Collections.ObjectsingletonList(application/json-patchjson)); }}} } 参考来自Gerard Davison博客博客的JCG合作伙伴 Gerard Davison 对JAX-RS 2.0的透明PATCH支持 。 翻译自: https://www.javacodegeeks.com/2014/02/transparent-patch-support-in-jax-rs-2-0.html
http://wiki.neutronadmin.com/news/375902/

相关文章:

  • 义乌网站建设技术托管在线旅游网站建设前的调研
  • 服务器网站管理助手龙华网站建设销售员
  • 广西智能网站建设报价电脑网络设计干什么的
  • 手机如何制作网站教程天津开发区网站
  • 长沙麓谷建设发展有限公司网站互联网广告公司排名前十
  • 无锡锡山网站建设android studio打包apk
  • 好看的网站首页设计给企业开发网站
  • 鞍山市信息网站赣州建设监督网站
  • 网站建设中首页模板睢宁县建设工程招标网
  • 旅游网站开发与设计论文百度指数怎么下载
  • 土地违法建设投诉网站外贸网络营销的方法
  • seo站点是什么意思高端移动网站开发
  • 免费的企业网站做简单的网站链接
  • 网站建设免费课程火狐浏览器网页版
  • 青岛网站建设方案网站维护更新费用
  • 国外开源网站系统北京公司招聘
  • 白狐网站建设网站建设关键词优化价格
  • 深圳网站建设价格多少钱wordpress如何做页面模板下载
  • 洛江区住房和城乡建设局网站网站信息化建设具体内容
  • 有效的网站推广方案wordpress 下雪插件
  • dreamwearver做网站地图seo排名优化软件价格
  • 企业文化模板企业网站优化之如何做需求分析
  • 上海松江建设银行网站wordpress灯箱图片
  • 如何查网站开发商seo 对手 网站 自然
  • 成功案例 品牌网站深圳好蜘蛛网站建设公司
  • 中国门户网站网站开发的硬件设备
  • 自助小站郑州汉狮做网站的公司
  • 网站产品图怎么做成都网站制作公司定制
  • 网站建设 html5网页设计论文
  • 深圳福田有什么好玩的地方泉州关键词优化