DomainObjectNotFoundException为JSON

时间:2014-04-22 18:54:56

标签: grails jax-rs

我使用jax-rs在grails中制作API。我希望它只使用JSON而不使用XML。 所以当我替换

@Produces(['application/xml','application/json'])

只是

@Produces(['application/json'])

它有帮助,所有成功的响应都以JSON形式返回。唯一的问题是,只要存在DomainObjectNotFoundException,它仍然使用XML格式。到目前为止,我一直试图找到如何改变那个但是不成功的。

例如:

throw new DomainObjectNotFoundException(User.class, dto.id)

仍然响应xml响应

<error>User with id iva not found</error>

我希望得到JSON回应。

提前谢谢

1 个答案:

答案 0 :(得分:1)

根据this code,看起来XML内容类型在构造异常时被硬编码。对我来说,在这种情况下你有两个选择

  1. 为此目的创建自己的例外(最优雅,但可能有点过分)
  2. 执行以下操作(不那么优雅,但很简单):

     def exception = new DomainObjectNotFoundException(User.class, dto.id)
     def response = Response.fromResponse(exception.response).type(MediaType.APPLICATION_JSON)
     throw new WebApplicationException (newResponse)
    

    请注意,您将不再抛出特定的DomainObjectNotFoundException,因此这可能不是您的最佳选择。写完之后,老实说我会选择1。