Jersey 2.22.2 官方文档第7章学习笔记
来源:互联网 发布:ipad版怎么看淘宝直播 编辑:程序博客网 时间:2024/05/29 10:19
官网文档地址:https://jersey.java.net/documentation/latest/representations.html#d0e6665
第7章
7.2 创建Responses对象
有时,对于一个Request请求,需要返回额外的信息。这些信息能够通过使用Response对象与ResponseBuilder对象来创建并返回。例如,Restful新资源的创建是通过一个POST请求并返回201(状态码)以及响应头的形式来完成。其URI是新创建的资源。上述过程可以通过下面的代码来实现。
@Path("buildResp")public class BuildingResponse {@GET@Consumes(MediaType.TEXT_PLAIN)public Response post(@QueryParam("content")String content){URI createUri = URI.create("xxx.ll.com/ss");return Response.created(createUri).build();}}
发出请求 http://localhost:9998/buildResp?content=1234 返回结果如下图所示。
但上面的代码没有任何返回数据,返回数据可以通过ResponseBuilder的entity方法来添加。
@Path("buildResp")public class BuildingResponse { @GET @Consumes(MediaType.TEXT_PLAIN) public Response post(@QueryParam("content")String content){ URI createUri = URI.create("xxx.ll.com/ss"); return Response.created(createUri).entity(content).build(); }}
除了entity还可以设置其它的属性,如last modified等。
7.3 WebApplicationException 异常与异常转换为并通过Response返回
7.2节演示了如何返回Http response对象。当在try-catch中处理异常时,可以通过同样的方法返回HTTP 错误。为了与Java编程模型保持一致,JAX-RS允许建立Java异常与Http error response对象的映射关系。下面的代码演示了从resource方法中抛出CustomNotFoundException异常,并以Http response来返回给客户端。
@Path("buildResp")public class BuildingResponse { @GET @Consumes(MediaType.TEXT_PLAIN) public Response post(@QueryParam("content") String content) { if (content.equals("1")) { throw new CustomNotFoundException("{msg:content null exception,code:100001}"); } URI createUri = URI.create("xxx.ll.com/ss"); return Response.created(createUri).entity(content).build(); }}public class CustomNotFoundException extends WebApplicationException { private static final long serialVersionUID = -5532594936351897109L; public CustomNotFoundException() { super(Response.status(404).build()); } public CustomNotFoundException(String message) { super(Response.status(404).entity(message).type(MediaType.APPLICATION_JSON).build()); }}
发出请求 http://localhost:9998/buildResp
除了通过WebApplicationException映射异常,还可以通过实现 ExceptionMapper<E extends Throwable>接口来映射异常。
@Path("buildResp")public class BuildingResponse { @GET @Consumes(MediaType.TEXT_PLAIN) public Response post(@QueryParam("content") String content) { if (content.equals("1")) { throw new RuntimeException("{msg:content null exception,code:100001}"); } URI createUri = URI.create("xxx.ll.com/ss"); return Response.created(createUri).entity(content).build(); }}@Providerpublic class EntityNotFoundMapper implements ExceptionMapper<Exception>{ public Response toResponse(Exception exception) { // TODO Auto-generated method stub return Response.status(404).entity(exception.getMessage()).type("text/plain") .build(); }}
上面的代码带有@Provider注解。当系统抛出Exception异常,EntityNotFoundMapper的toResponse方法将被调用。Jersey支持异常映射器的扩展。扩展的异常映射器必须实现org.glassfish.jersey.spi.ExtendedExceptionMapper接口。这个接口继承与前面所提到的ExceptionMapper<T>接口,并提供了isMappable(Throwable)方法。该方法判断所提供的异常是否能被处理。当返回true时,表示能够处理,false表示不能处理。在运行时,当异常被抛出,该方法将被调用。因此创建ExtendedExceptionMapper子类,然后实现isMappable方法,有选择地对异常处理。
@Providerpublic class ExtendExceptionMapper implements ExtendedExceptionMapper<Exception>{ public Response toResponse(Exception exception) { return Response.status(404).entity("{status:failed,code:1002}").build(); } public boolean isMappable(Exception exception) { // TODO Auto-generated method stub if(exception instanceof NullPointerException){ return false; } return true; } }@Path("buildResp")public class BuildingResponse { @GET @Consumes(MediaType.TEXT_PLAIN) public Response post(@QueryParam("content") String content) { if (content.equals("1")) { throw new RuntimeException("{msg:content null exception,code:100001}"); } URI createUri = URI.create("xxx.ll.com/ss"); return Response.created(createUri).entity(content).build(); }}发起请求http://localhost:9998/buildResp?content=1
修改isMappble方法后,异常被没有被映射处理。因此返回500,而不是返回定义的http响应码。
public boolean isMappable(Exception
if(exception instanceof NullPointerException){ return true; } return false;}
因此当我们需要对某且异常映射处理进行拦截,并进行选择性处理时,实现ExtendedExceptionMapper接口即可。
- Jersey 2.22.2 官方文档第7章学习笔记
- Jersey 2.22.2 官方文档第3章学习笔记
- Jersey 2.22.2 官方文档第18章学习笔记
- Jersey 2.22.2 官方文档第10章学习笔记
- Solidity官方文档学习笔记(2)
- MySQL官方参考文档学习笔记——第3章
- RakNet官方文档学习笔记
- UINavigationController官方文档学习笔记
- spring 官方文档,学习笔记
- tkinter官方文档学习笔记
- libevent官方文档学习笔记
- Java8官方文档学习笔记
- Libev 官方文档学习笔记
- Libev 官方文档学习笔记
- Libev 官方文档学习笔记
- PostgreSQL官方文档学习笔记
- jersey学习笔记2-web服务
- Jersey学习笔记
- 静态链表(C++实现)
- 记录下mybatis中#{}和${}传参的区别
- Codeforces Round #101 (Div. 2) B. Hopscotch
- js 数据类型与转换
- 再谈HashMap-由一个实际问题引发的对HashMap设计吐嘈
- Jersey 2.22.2 官方文档第7章学习笔记
- poj2226 muddy fields
- 百度地图获取二个经纬度坐标间的距离
- codeforces 339C 记忆化搜索
- ios移动端直播
- unity3d中让物体显示和隐藏的方法
- 你是想读书,还是想读完书?
- php 数据类型与转换
- Windows下QT软件发布