我试图让一个自定义的JSON呈现在我的REST API的工作异常。
我能拿到了大部分的我需要的自定义编组工作,但是我想有过,我没有在编组访问上下文控制。 Grails文档演示了如何编写自定义渲染器,我有一个,我觉得应该工作,但是单位期间,我不能用它测试我的REST控制器。
Grails的文档: http://grails.org/doc/2.3.4/guide/webServices.html#customRenderers
有谁知道我怎么会初始化此渲染在我的控制器动作单元测试过程中使用?
上述文件只是说如何设置它在resources.groovy文件。
当我用的是编组,我能够做到:
def setup(){
//Set up the custom JSON marshallers
JSON.registerObjectMarshaller(new CusomMarshaller(), 1)
}
但我没有看到提炼等效的方法。 任何人都可以点我在正确的方向?
更多详情:
这里是我的渲染器:
class JSONExceptionRenderer extends AbstractRenderer<Exception>{
JSONExceptionRenderer(){
super(Exception, [MimeType.JSON, MimeType.HAL_JSON, MimeType.TEXT_JSON] as MimeType[])
}
@Override
void render(Exception object, RenderContext context) {
log.warn("RENDERING")
Exception exception = (Exception) object
//Default to internal error
Integer code = 500
//If it is a defined exception with a more appropriate error code, then set it
if(exception instanceof RestException){
code = (Integer) ((RestException) exception).getCode()
}else if(exception instanceof MissingResourceException){
code = 404
}
context.status = HttpStatus.valueOf(code)
//Write the JSON
Writer writer = context.getWriter()
Map content = ["code":code, "status":"error", "message":exception.message]
JsonBuilder builder = new JsonBuilder(content)
builder.writeTo(writer)
}
}
这是我想要得到它的工作方式:
try{
log.info "Throwing exception"
throw new NullPointerException("Test Exception")
}catch(Exception ex){
render ex as JSON
}
谢谢!