codecamp

Hasor 请求并返回JSON

将请求的处理结果作为 JSON 响应给客户端。


在 Hasor 中响应一个 JSON 字符串给浏览器非常简单,首先我们的请求处理器只需要将要作为 JSON 进行响应的数据在请求处理方法上以返回值形式 return 即可以,剩下的就交给渲染器。下面是请求处理的例子:


@MappingTo("/helloAcrion.json")
public class HelloAcrion extends WebController {
    public Object execute(RenderInvoker invoker) {
        return ...
    }
}


一般情况下请求一个 json 资源我们习惯用 .json 作为资源的后缀。如果您使用的是 restful 风格的路径,您可能还需要通过 @Produces 注解来指定响应的格式。如下:

@MappingTo("/user/info/${userID}")
public class HelloAcrion extends WebController {
    @Produces("json")
    public Object execute(RenderInvoker invoker) {
        return ...
    }
}


配置 JSON 渲染器,Hasor 内置的 JSON 渲染器。会自动感知当前项目中可以使用的 JSON 序列化库,默认情况下,JsonRender会自动按照下面顺序尝试寻找可以使用的 JSON 库:fastjson、Gson、Json-lib。如果您没有引入任何一个 json 库那么会有一个 ClassNotFoundException 异常。


Hasor 的 JSON 渲染器还允许您跳过 Hasor 内置 JSON 渲染库的查找规则,直接使用您指定的渲染方式。您可以通过这种方式实现自定义 JSON 渲染,使用方式如下:

// JSON 渲染引擎
public class UserJsonRenderEngine implements JsonRenderEngine {
    @Override
    public void writerJson(Object renderData, Writer writerTo) throws Throwable {
        //将 renderData 数据序列化到 writerTo 中
    }
}
// 注册 JSON 渲染引擎
public class StartModule extends WebModule {
    @Override
    public void loadModule(WebApiBinder apiBinder) throws Throwable {
        // - 设置 JSON 渲染器
        apiBinder.suffix("json").bind(JsonRender.class);              //设置 JSON 渲染器
        // - 使用自定义 JSON 序列化引擎(可选)
        apiBinder.bind(JsonRenderEngine.class).to(UserJsonRenderEngine.class);
    }
}

当上面这一切都做好之后,您只需要访问一下您的请求处理器即可得到结果。


Hasor Freemarker
Hasor 自定义模板引擎
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }