2015-02-10 29 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