paulwong

          Jersey Exception Handling

          使用JERSEY框架輸出JSON,需捕獲所有的HTTP錯誤,如404等,業務錯誤及其他未定義的錯誤,將這些錯誤輸出JSON,而不是TOMCAT的錯誤。
          JERSEY已和SPRING整合。

          web.xml
          <?xml version="1.0" encoding="UTF-8"?>
          <web-app xmlns="http://java.sun.com/xml/ns/javaee">

              <display-name>Restful Web Application</display-name>
              
              <servlet>
                  <servlet-name>jersey-serlvet</servlet-name>
                  <servlet-class>
                      com.sun.jersey.spi.spring.container.servlet.SpringServlet
                  </servlet-class>
                  <init-param>
                      <param-name>com.sun.jersey.config.property.packages</param-name>
                      <param-value>restfullapi.rest.service,restfullapi.common.provider,restful.web</param-value>
                  </init-param>
                  <init-param>
                      <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
                      <param-value>true</param-value>
                  </init-param>
                  <load-on-startup>2</load-on-startup>
              </servlet>

              <servlet-mapping>
                  <servlet-name>jersey-serlvet</servlet-name>
                  <url-pattern>/*</url-pattern>
              </servlet-mapping>
              
           
               <listener>
                  <listener-class>
                      org.springframework.web.context.ContextLoaderListener
                  </listener-class>
              </listener>
              
              <listener>
                  <listener-class>
                      org.springframework.web.context.request.RequestContextListener
                  </listener-class>
              </listener>
              
              <context-param>
                  <param-name>contextConfigLocation</param-name>
                  <param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value>
              </context-param>
              
              <!-- spring logback -->
              <context-param>
                  <param-name>logbackConfigLocation</param-name>
                  <param-value>classpath:logback.xml</param-value>
              </context-param>  
              <listener>
                  <listener-class>ch.qos.logback.ext.spring.web.LogbackConfigListener</listener-class>
              </listener>

              <context-param>
                  <param-name>webAppRootKey</param-name>
                  <param-value>restfull-api</param-value>
              </context-param>
              
              <welcome-file-list>
                  <welcome-file>/index.jsp</welcome-file>
              </welcome-file-list>
              

          </web-app>


          AbstractBaseRestfulException.java
          public abstract class AbstractBaseRestfulException extends Exception{

              private static final long serialVersionUID = 6779508767332777451L;
              
              public AbstractBaseRestfulException()
              {
              }
              
              public AbstractBaseRestfulException(String message)
              {
                  super(message);
              }

              public abstract String getErrcode();

              public abstract void setErrcode(String errcode);

              public abstract String getDescription();

              public abstract void setDescription(String description);
              

          }


          AbstractBaseRestfulExceptionMapper.java
          import javax.ws.rs.core.MediaType;
          import javax.ws.rs.core.Response;
          import javax.ws.rs.core.Response.Status;
          import javax.ws.rs.ext.ExceptionMapper;
          import javax.ws.rs.ext.Provider;

          import org.slf4j.Logger;
          import org.slf4j.LoggerFactory;

          import com.paul.common.exception.AbstractBaseRestfulException;
          import com.paul.common.json.DefaultJsonResponse;

          @Provider
          public class AbstractBaseRestfulExceptionMapper implements ExceptionMapper<AbstractBaseRestfulException>{

              private Logger logger = LoggerFactory.getLogger(AbstractBaseRestfulExceptionMapper.class);
              
              public Response toResponse(AbstractBaseRestfulException exception) {
                  
                  logger.error(exception.getMessage(), exception);
                  
                  DefaultJsonResponse<Object> response = new DefaultJsonResponse<Object>();
                  response.setDescription(exception.getDescription());
                  response.setErrcode(exception.getErrcode());
                  response.setResult(null);
                      
                  return Response.status(Status.BAD_REQUEST)
                          .entity(response)
                          .type(MediaType.APPLICATION_JSON + ";charset=utf-8")
                          .build();
              }

          }


          OtherExceptionMapper.java
          import javax.ws.rs.core.MediaType;
          import javax.ws.rs.core.Response;
          import javax.ws.rs.core.Response.Status;
          import javax.ws.rs.ext.ExceptionMapper;
          import javax.ws.rs.ext.Provider;

          import org.slf4j.Logger;
          import org.slf4j.LoggerFactory;

          import com.paul.common.json.DefaultJsonResponse;
          import com.paul.common.json.JsonResponseStatus;

          @Provider
          public class OtherExceptionMapper implements ExceptionMapper<Exception>{
              
              private Logger logger = LoggerFactory.getLogger(OtherExceptionMapper.class);

              public Response toResponse(Exception exception) {
                  
                  logger.error(exception.getMessage(), exception);
                  
                  DefaultJsonResponse<Object> response = new DefaultJsonResponse<Object>();
                  response.setDescription(JsonResponseStatus.OTHER_ERROR.getMessage() + exception.getMessage());
                  response.setErrcode(JsonResponseStatus.OTHER_ERROR.getCode());
                  response.setResult(null);
                      
                  return Response.status(Status.BAD_REQUEST)
                          .entity(response)
                          .type(MediaType.APPLICATION_JSON + ";charset=utf-8")
                          .build();
              }

          }


          WebApplicationExceptionMapper.java
          import javax.ws.rs.WebApplicationException;
          import javax.ws.rs.core.MediaType;
          import javax.ws.rs.core.Response;
          import javax.ws.rs.ext.ExceptionMapper;
          import javax.ws.rs.ext.Provider;

          import org.slf4j.Logger;
          import org.slf4j.LoggerFactory;

          import com.paul.common.json.DefaultJsonResponse;

          @Provider
          public class WebApplicationExceptionMapper implements ExceptionMapper<WebApplicationException >{

              private Logger logger = LoggerFactory.getLogger(WebApplicationExceptionMapper.class);
              
              public Response toResponse(WebApplicationException exception) {
                  
                  logger.error(exception.getMessage(), exception);
                  
                  DefaultJsonResponse<Object> response = new DefaultJsonResponse<Object>();
                  response.setDescription(exception.getMessage());
                  response.setErrcode(String.valueOf(exception.getResponse().getStatus()));
                  response.setResult(null);
                      
                  return Response.status(exception.getResponse().getStatus())
                          .entity(response)
                          .type(MediaType.APPLICATION_JSON + ";charset=utf-8")
                          .build();
              }

          }


          Controller中無須再處理異常
          import javax.ws.rs.DefaultValue;
          import javax.ws.rs.GET;
          import javax.ws.rs.Path;
          import javax.ws.rs.Produces;
          import javax.ws.rs.QueryParam;
          import javax.ws.rs.core.MediaType;

          import org.slf4j.Logger;
          import org.slf4j.LoggerFactory;
          import org.springframework.beans.factory.annotation.Autowired;
          import org.springframework.stereotype.Controller;

          import com.paul.common.json.DefaultJsonResponse;
          import com.paul.common.json.JsonResponseStatus;
          import com.paul.program.stbstart.valueobject.StbStart;
          import com.paul.stbstart.valueobject.StbStartRequest;
          import com.paul.restfullapi.rest.service.AdvertisementRestfulService;

          @Path("/advertisement")
          @Controller
          public class AdvertisementRestfulController {
              
              private Logger logger = LoggerFactory.getLogger(AdvertisementRestfulController.class);
              
              @Autowired
              AdvertisementRestfulService advertisementRestfulService;
              
              @Path("/getAdvertisement")
              @Produces({MediaType.APPLICATION_JSON + ";charset=utf-8"})
              @GET
              public DefaultJsonResponse<StbStart> getAdvertisement(
                      @DefaultValue("") @QueryParam("version")String version,
                      @QueryParam("token")String token) throws Exception
              {
                  DefaultJsonResponse<StbStart> response = new DefaultJsonResponse<StbStart>();
                  StbStartRequest request = new StbStartRequest();
                  logger.info(version);
                  request.setVersion(version);
                  request.setToken(token);
                  StbStart result = advertisementRestfulService.findByVersion(request);
                  response.setResult(result);
                  response.setDescription(JsonResponseStatus.SUCCESS.getMessage());
                  response.setErrcode(JsonResponseStatus.SUCCESS.getCode());
                  
                  logger.info("----------------");
          //        double i = 1/0;
                  return response;
              }
              

          }







          posted on 2014-04-28 14:44 paulwong 閱讀(1269) 評論(0)  編輯  收藏 所屬分類: JAX-RS


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 通城县| 马尔康县| 南汇区| 揭阳市| 灵川县| 明溪县| 昌黎县| 昭觉县| 保德县| 江口县| 大理市| 休宁县| 柳江县| 敦化市| 唐河县| 台山市| 北辰区| 克东县| 融水| 高邑县| 台东市| 和田市| 呼玛县| 中西区| 武威市| 德昌县| 博兴县| 宜宾县| 潮安县| 汾西县| 澄城县| 鄱阳县| 通辽市| 万安县| 阿尔山市| 鹤壁市| 鲜城| 清丰县| 沙田区| 高台县| 吐鲁番市|