rest service

选型

   REST还是遵循JAX-RS规范,选型就只在Sun Jersey, Apache CXF 和 JBoss RESTEasy中展开。 JBoss的项目习惯性忽略,而CXF的JSON输出,List/Map输出总是做不好(JAXB的顽疾),最后用了Jersey。

   但无论Jersey 还是 CXF,JSON输出都是先要绕一圈JAXB,所以用了号称JSON最快的Jackson的JAX-RS provider。

In SpringSide3

1. 应用集成

  • 与Web应用集成:在web.xml里面划一个/services/* 归Jersey管即可。
  • 与Spring集成: 添加jersey-spring.jar在classpath里,然后就爱干嘛干嘛了。

2. 参数输入

  • @PathParam用来表示Restful风格下在URL中的id等标识。(见mini-service getUser)
  • @QueryParameter可以转换任何有以String为参数的构造函数类,还可以设定defaultValue, 当参数为空时可以自动抛异常(见showcase searchUser)
  • @POST+ @Consumes 以POST方式传递XML或JSON编码的Java对象 (见mini-service createUser)
  • @Context UriInfo, @Context HttpHeaders, @Context HttpServletRequest 获取灵活的,不固定的参数. 可以从原版HttpServletRequest中获取,也可以用封装好的更方便的UriInfo和HttpHeaders.(见showcase searchUserByFlexibleParameter)

3. 结果输出

  • 直接返回对象,用@Produces控制输出的格式为Html/Xml/JSON等。
  • 返回Response对象,一般用于返回304 无更新,或者create对象之后返回对象uri标识。(见mini-service createUser)
  • 返回Response对象,用于要根据不同的输入参数,决定返回Html或Xml/JSON, 而且Html与JSon返回的内容又不一样的时候。(showcase searchUser)

4. 异常输出

  • 要抛一个干净的500错误,throw new WebApplicationException(); 即可。
  • 要自定义错误返回码和错误信息的话:
    1.使用标准返回码: new WebApplicationException(Response.status(status).entity(message).type("text/plain").build());
    2.使用非标准返回码:new WebApplicationException(Response.status(status).entity(message).type("text/plain").build());

5. 客户端

      JAX-RS规范并没有对客户端进行定义,基本上大家各显神通了。

5.1 客户端输入参数
  • 输入URL Query参数 client.path("/users/search").queryParam("name", name)
  • 输入JSON编码的对象 client.path("/users").entity(user, MediaType.APPLICATION_JSON)
5.2 客户端返回定义
  • String.class, 直接取得返回的字符串,自己进行处理。
  • UserDTO.class, 让Jersey帮忙将编码字符串转成对应的Java对象。
  • new GenericType<List<UserDTO>>() } 专门用于根对象是List, Map这些JAXB最头痛的对象。
  • ClientResponse.class, 可以用来取得返回值,已创建对象URI等
5.3 HttpBasic安全控制

        自行对用户名密码进行HttpBasic编码后放入Http Header即可.(见showcase的getAllUser)

6. Jackson JSON Provider

       在META-INF/services中放入javax.ws.rs.ext.MessageBodyReader/Writer文件,里面指定使用 Jackson,就可以远离CXF和Jersey基于JAXB的,即使做了N多配置还是不让人满意的JSON实现了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值