记一些遇到的乱七八糟的东西。

find / -name ‘*logf’
find . -name test

mvn install -Ddockerfile.skip=true -Dmaven.test.skip=true -X
mvn compile/clean/test/test-compile/site/package/install

@NotEmpty 集合上面使用
@NotBlank 用在String上面
@NotNull 基本数据类型

MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。https://mybatis.plus/guide/

@TableLogit 逻辑删除(实体类字段上加的注解)
@TableField(fill=FieldFill.INSERT) /DEFAULT/UPDATE/INSERT_UPDATE

CICD 持续集成-交付-部署

幂等(idempotent)方法:无论调用多少次,结果都是一样的(任意多次执行所产生的影响均与一次执行的影响相同)。例如,查询、删除操作(返回结果可能不同)就是天然幂等性操作。

List<User> users = userService.getAppActByRoomId(roomId);
//把user List中的userId取出来放在set集合里面
Set<String> userIds = users.stream().map(User::getId).collect(Collectors.toSet());

// 多使用java JDK8以后出现的工具类,简化代码
List<String> list = StrUtil.splitTrim(cancelDest, ","); // cancelDest是一个字符串,eg:001,002,003
list.remove(userId); // return boolean,在list里面去掉useerId这个元素
CollUtil.join(list, ",");  // 把list转成用“,”连接的String

// 判断不为空的 传统写法  
if(str != null && str.length() != 0) {}
if(str != null && str.equals("")) {}
// 采用工具类
if(StringUtils.isNotBlank(str)) {}  // lang3,判断了不为null,不为空
if(StrUtil.isNotBlank(str)) {} // cn.hutool.core.util.StrUtil
roomInfoService.lambdaUpdate.eq(RoomInfo::getId, roomId)
							.set(RoomInfo::getCancelDest, CollUtil.join(list, ",")  //list->String
							.update();
roomInfoService.lambdaQuery.eq(RoomInfo::getId, roomId)
						   .list();  // .one()					

react-bootstrap-table:http://allenfang.github.io/react-bootstrap-table/docs.html#dataFormat

记一次报错:前端获取的数据始终和后台发来的数据不太一致

所谓不太一致呢,是因为其他字段的数据都是正确的,只有布尔值显示的都是false,很神奇的一件事…
看看原来的代码:

// [resFlg, resData] = await IcApiUtils.fetchAutoResMaster();
  static async fetchAutoResMaster() {
    let path = `/v1/api/autores`;
    return this.async_request("GET", path, {});
  }

  static async async_request(method, path, sendData) {
    let gearUrl = this.gearUrl();
    let contents;
    if (method == "GET") {
      contents = {
        type: method,
        headers: { "X-DMC-CSRF-TOKEN": this.getCsrfToken() },
        url: gearUrl + path,
        data: sendData,
        async: true,
      };
    } else if (method == "POST" || method == "PUT" || method == "DELETE") {
      contents = {
        type: method,
        headers: { "X-DMC-CSRF-TOKEN": this.getCsrfToken() },
        url: gearUrl + path,
        data: JSON.stringify(sendData),
        contentType: "application/json",
        async: true,
      };
    }
    if (path.indexOf("user/login") > -1) {
      delete contents.headers;
    }
    let statusCode;
    let resData, errData;
    let ajaxRes;
    let defer = $.Deferred();
    contents.success = defer.resolve;
    contents.error = defer.reject;
    $.ajax(contents);
    try {
      ajaxRes = await defer.promise();
      console.log(ajaxRes); // 打印的东西如下图,数据是错误的
      console.log(JSON.parse(JSON.stringify(ajaxRes))); // 打印的数据是正确的
      console.log(JSON.stringify(ajaxRes));
      // 200番を成功値とする
      statusCode = "200";
    } catch (e) {
      console.log("Catch *** status:" + e.status);
      errData = e;
      statusCode = e.status;
    }
    if (statusCode == 200) {
      console.log("async_request ok");
      return [true, ajaxRes];
    } else if (statusCode == 401) {
      console.log("async_request auth ng");
      browserHistory.replace(`/v1/login`);
      return [false, errData];
    } else {
      console.log("async_request ng");
      return [false, errData];
    }
  }

在这里插入图片描述
看浏览器的Network是正确的,三个布尔值都是true,但是像上面的代码那样 ajaxRes = await defer.promise();ajaxRes 拿到的数据就是有错误的。
没找到原因,但是只能解决这个问题,使用这种方式,转来转去数据就是正确的 JSON.parse(JSON.stringify(ajaxRes));使用ajaxRes[0].endTalkFlg也是可以拿到正确的数据。
所以说,很神奇!

后续来了…
这是使用那个方法的地方

async fetchData() {
    let resFlg, resData;
    [resFlg, resData] = await IcApiUtils.fetchAutoResMaster();
    if (resFlg) {
      let entData, doorData;
      entData = [];
      doorData = [];
      for (let i = 0; i < resData.length; i++) {
        // 文字列はbooleanで処理する(返却時は文字列にする)
        // resData[i].endTalkFlg = resData[i].endTalkFlg == "true";
        // resData[i].unLockFlg = resData[i].unLockFlg == "true";
        // resData[i].presetFlg = resData[i].presetFlg == "true";

        if (resData[i].type == "entrance") {
          entData.push(resData[i]);
        } else {
          doorData.push(resData[i]);
        }
      }
      // エントランス設定
      this.setState({ tableData_1: entData });
      // ドアホン設定
      this.setState({ tableData_2: doorData });
    }
    IcCommonUtils.removeLoading();
  }

被注释注掉的地方是逻辑错误的,导致resData[i].endTalkFlg始终都是false。但是我不是专业搞前端的,不知道为啥这个jsx中的作用域是怎样的。反正把那三句话注释掉,所有的resData数据就是正常的了。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐