Nutz.Json 在Mvc中的用法

Jul 10, 2017 10:38:44 AM

作者:@gmail.com">wendal

Mvc中使用Json

第一种,输出用

  1. @Ok("json:{locked:'password|salt'}")

第二种 输入用的

  1. @AdaptBy(type=JsonAdaptor.class)

@Ok中的json

首先,必须再再再强调一次,如果返回值是String,即您自行生成Json字符串(无论是拼接的还是Json.toJson的还是用fastJson转的)就别用@Ok("json"),而是用@Ok("raw:json"),否则字符串将再次转义,这样在页面端又得eval一次,而且下面的所有自定义配置统统无效

@Ok("json:xxx") 对应的类是 UTF8JsonView

最精简也是最常见的形式

  1. @Ok("json")
  2. // 等价于
  3. @Ok("json:nice")

内置的模式,一对一对应JsonFormat中的几个快捷方法

  1. @Ok("json:nice")
  2. @Ok("json:full")
  3. @Ok("json:forLook")
  4. @Ok("json:compact")

详细配置, 后面的就是JsonFormat的json形式而已,与JsonFormat的属性一一对应

  1. @Ok("json:{ignoreNull:true, locked:'password|salt'}")
  2. // 翻译为Java代码的话
  3. Json.toJson(obj, new JsonFormat().setIgnoreNull(true).setLocked("password|salt"))

示例配置 — 忽略password和salt属性,且缩进为一个空格

  1. @Ok("json:{indentBy:' ', locked:'password|salt'}")

示例配置2 — 设置日期格式为yyyyMMdd

  1. @Ok("json:{dateFormat:'yyyyMMdd'}")

AdaptBy的说明

JsonAdaptor 适配器本身并没有什么可以配置的东西

  1. @AdaptBy(type=JsonAdaptor.class)

传输的数据应为POST或PUT,且请求体整个就是一个JSON字符串,而不是表单参数哦

示例代码,页面发送一个User类的json到服务器, 同理可以发送List,Map等等, 然后服务器用json响应

页面端的代码

  1. $.ajax({
  2. url : ${base}/user/update
  3. type : "POST",
  4. data : $.toJSON({ id: 88, name:"wendal", location : "地球" }),
  5. dataType : "json", // 这是服务器响应的数据格式,不是发送内容的格式
  6. success : function (re) {
  7. if (re.ok) {
  8. console.log(re.data.id);
  9. console.log($.toJSON(re.data));
  10. }
  11. }
  12. });

服务器端的入口方法

  1. @AdaptBy(type=JsonAdaptor.class)
  2. @At("/user/update")
  3. @Ok("json:{locked:'password|salt'}")
  4. public Object update(@Param("..")User user) {
  5. NutMap re = new NutMap();
  6. if (user == null || user.getId() < 1) {
  7. re.put("ok", false);
  8. re.put("msg", "null object");
  9. return re;
  10. }
  11. int count = dao.update(user);
  12. if (count != 1) {
  13. re.put("ok", false);
  14. re.put("msg", "no user match");
  15. return re;
  16. }
  17. re.put("data", dao.fetch(User.class, user.getId));
  18. re.put("ok", true);
  19. return re;
  20. }

Chrome控制台将打印

  1. id=88
  2. {
  3. id : 88,
  4. name : "wendal",
  5. location : "地球"
  6. // 其他属性,但没有password和salt出现
  7. }

本页面的文字允许在知识共享 署名-相同方式共享 3.0协议GNU自由文档许可证下修改和再使用。

原文: http://nutzam.com/core/json/mvc.html