2015-02-10 114 views
0

我已經創建瞭如下的自定義JacksonJaxbJsonProvider。自定義JacksonJaxbJsonProvider沒有正確拋出異常

import javax.ws.rs.Produces; 
import javax.ws.rs.core.MediaType; 
import javax.ws.rs.ext.Provider; 

import org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider; 
import org.codehaus.jackson.map.ObjectMapper; 
import org.codehaus.jackson.map.SerializationConfig.Feature; 
import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion; 
import org.codehaus.jackson.map.module.SimpleModule; 

@Provider 
@Produces(MediaType.APPLICATION_JSON) 
public class JacksonJsonProvider extends JacksonJaxbJsonProvider { 

    public JacksonJsonProvider() { 
     super(); 
     ObjectMapper mapper = new ObjectMapper(); 
     //mapper.registerModule(new SimpleModule("jacksonJsonModule", null)); 
     mapper.setSerializationInclusion(Inclusion.NON_NULL); 
     mapper.setSerializationInclusion(Inclusion.NON_DEFAULT); 
     //mapper. 
     //mapper.configure(Feature.WRITE_DATES_AS_TIMESTAMPS, false); 
     mapper.configure(Feature.WRAP_EXCEPTIONS, true); 
     mapper.configure(org.codehaus.jackson.map.DeserializationConfig.Feature.WRAP_EXCEPTIONS, false); 
     mapper.configure(org.codehaus.jackson.map.DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false); 

     super.setMapper(mapper); 
    } 

} 

在我的代碼中,我拋出了帶errorMsg和errorCode的WebApplicationException。

當我使用「org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider」,並拋出一個WebApplicationException我得到適當的異常反應如下

{ 
errorMsg: "Invalid input value passed, please correct the value" 
errorCode: 400 
} 

但是,當我在上面提到的使用和JacksonJsonProvider拋出一個異常,我總是得到500內部服務器錯誤。 :(

我錯過了一些配置設置。請幫我搞清楚了這一點。

感謝,
Pratz。

----- -----編輯對不起 爲註釋格式。我在這裏書面方式同樣的事情更好的代碼格式。

在我的資源,其中有@Path註釋,我只是拋出一個異常,它看起來是這樣的

@ GET 
@ Path("/{id}") 
public User getUser(@ PathParam("id") Long userId) { 
    try { 
     userService.getUser(userId); 
    } catch(Exception e) { 
     throw new (Response.status(statusCode).entity(new ErrorResource("User not found.", Status.BAD_REQUEST..getStatusCode())).build()); 
    } 
} 
+0

和哪兒你扔例外? – 2015-02-10 13:25:18

+0

在我的資源中,有@Path註釋,我只是拋出一個異常。它看起來是這樣的 在線'@ GET @Path( 「/(編號)」) 公共用戶的getUser(@PathParam( 「ID」)長期用戶id){ \t嘗試{ \t \t userService.getUser(用戶ID ); ();}();}};}};}};}};}};} \t} }' – Pratz 2015-02-10 16:54:46

回答

0

我通過調試JacksonJsonProvider.writeTo方法解決了這個問題。我有一個errorResource類被填充適當的錯誤消息和錯誤代碼,但這個類缺少默認的構造函數,所以我的自定義JacksonJsonProvider無法創建實例。
現在一個問題仍然保持開放是,它是默認JacksonJsonProvider但與定製JacksonJsonProvider工作,但截至目前,我會接受它:)

感謝, Pratz