2013-07-19 68 views
1

我正在使用球衣2.0創建REST服務。我伸出WebApplicationException球衣2.0 jaxrs RI - 返回json字符串異常

方法提高特定的異常

if(json.equals("") || json.equals(" ")) { 
     throw new ArgumentException("bad post data"); 
} 


     public class ArgumentException extends RestException { 
     ..... 

     public ArgumentException(String message) { 
      super(Status.BAD_REQUEST,message); 
     } 
    } 


    public class RestException extends WebApplicationException { 
    ........... 
    public RestException(Status status, String message) { 

      super(Response.status(status) 
        .entity(message) 
        .type("text/plain") 
        .build()); 
      /* 
      super(Response.status(status) 
        .entity(new ErrorBean(status.getStatusCode(),message)) 
        .type(MediaType.APPLICATION_JSON) 
        .build()); */ 

     } 


ErrorBean is a POJO 

返回誤差內RestException純字符串作品(右HTTP代碼400和消息)的方法。但是,當我嘗試傳遞ErrorBean POJO並使用MediaType.APPLICATION_JSON作爲響應時,我得到一個錯誤,指出「Headers has already sent」,http錯誤代碼爲500(所以有一些內部管道問題)和空響應。

我也看了一下這個問題Returning JSON or XML for Exceptions in Jersey

我怎樣才能返回與代碼和消息異常像

一個JSON {「代碼」:400,「消息」:....}

更新

我收到的SO以及球衣用戶郵件列表的答案。步驟

  • 非AJXB POJO不需要任何註釋
  • 註冊JacksonFeature在你的應用

ResourceConfig RC =新ResourceConfig()。包( 「測試」)。註冊(JacksonFeature。類);

回答

2

你需要在你的應用程序/ ResourceConfig,即:

// Create JAX-RS application. 
final Application application = new ResourceConfig() 
     .packages("org.glassfish.jersey.examples.jackson") 
     .register(JacksonFeature.class) 
     // No need to register this provider if no special configuration is required. 
     .register(MyObjectMapperProvider.class); 

看看在documentation在新澤西州傑克遜的支持,並在example註冊JacksonFeature

+0

謝謝。這是缺少的。我爲其他人的利益添加了一個完整的例子。 – rjha94