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

福建巢网站建设济南搜点网络科技有限公司

福建巢网站建设,济南搜点网络科技有限公司,制作网站公司哪个好,法治网站的建设整改措施input发送a.jaxPATCH方法是最不受欢迎的HTTP方法之一#xff0c;因为直到最近才真正没有一种标准的PATCH格式。 一段时间以来#xff0c;它已经针对JSON进行了标准化#xff0c;因此有很多库可以为您完成繁重的工作。 出于本博客的目的#xff0c;我将使用json-patch#… input发送a.jax 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.htmlinput发送a.jax
http://www.huolong8.cn/news/10031/

相关文章:

  • 360免费建站系统设置本机外网ip做网站
  • 专业商城网站设计制作网页设计与制作的三个阶段
  • 设计logo网站免费奇米网站建设作业多少钱
  • 网站建设开发的规划流程网站发展趋势
  • 做电影资源网站有哪些电影网站怎么建设
  • 合肥做网站优化哪家好贵阳网站建设黔搜
  • 网站建设图片怎么加水印宁德东侨建设局网站
  • 长沙网站推广 下拉通推广银川网站建设怎么样
  • 济南建网站公养殖业网站模板
  • 厦门建站比较好的公司关于网站建设的问题
  • 四川省微信网站建设公wordpress alipay插件
  • 企业网站建设专业济南seo的排名优化
  • 网站建设合同定义做企业网站 签合同要注意什么
  • 营销网站与传统网站的区别西安网站有哪些手续费
  • 江西哪里有做电商网站的公司网络营销现状分析
  • 免费的网站推广平台表白网站生成器
  • 建信建设投资有限公司网站在线阅读小说网站怎么做
  • 北京建设网站制作如何注册wordpress
  • 照片分享网站模板下载做网站弄关键词多少钱
  • 无锡正规网站seo公司wordpress 产品链接
  • 公司网站设计费计入什么科目品牌建设体系
  • 开原铁岭网站建设股票网站怎么做动态表格
  • 网站建设亿金手指花总12wordpress用户前台
  • seo优化网站教程百度市场营销产品推广策划方案
  • 建设机械网站方案如何更改wordpress后台登陆密码
  • 网站开发的论文题目桂林人生活论坛
  • 杭州网站建设费用价格广州网站建设定制哪家口碑好
  • 网页制作与网站建设宝典个人简历模板免费下
  • 营销型网站架构师做瞹瞹嗳视频网站
  • 济南网站推广服务wordpress code