最近工作中遇到的9个问题(2019-08-21),Spring,yml配置文件,错读数字字符串,SpringMVC默认响应格式为xml

 

1、Spring,yml配置文件,错读数字字符串

结果发现读出来的字符串变量内容为1,而不是期望的001.
其原因是yml会把0开头的作为8进制对待,主动去掉了前导零。

bcm.userNo: 00003 实际为“3”
bcm.corpNo: 0008146710 实际为“8146710.0”

正确的配置:
bcm.userNo: "00003"
bcm.corpNo: "0008146710"

2、lombook的@Data is only supported on a class.

枚举中不让用。

public enum YnEnum {  
    YES(1, "是"), NO(0, "否");  

    private Integer code;  
    private String value;  

    YnEnum(Integer code, String value) {  
        this.code = code;  
        this.value = value;  
    }  

    public Integer getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }
}

3、上面的枚举YnEnum。

```
/**
 * 根据code得到 对应的枚举类型
 */
public static YnEnum getEnumByCode(Integer code) {
    if (code == null) {
        return null;
    }
    //Integer必须equals,int用==
    for (YnEnum item : YnEnum.values()) {
        if (item.code.equals(code)) {
            return item;
        }
    }
    return null;
}
```

比较的时候,出bug了。 有的地方用int,所以直接==。 有的地方用Integer或String,就应该用equals方法。

4、java文件缓存,诡异的问题

Linux服务器A上,有若干文件,这些文件从B机器同步过来。
Linux上的同名文件,大小和时间已经更新了。
而Java文件的listFiles有缓存。
也有一种可能,用户一直在对某一个文件进行读取,底层自动只对这1条数据,进行了缓存。

Linux系统文件名不允许出现“英文括号()”。

Linux文件会有缓存吗?可能性感觉不大
Java File读写目录,会有缓存吗?可能性感觉不大
(java文件缓存,已经重新同步了,读取的还是之前大小的同名文件。
读取linux上的文件失败,缓存了?
)

Linux文件名,不允许英文括号。
Windows中英文括号没问题。

2个公司名匹配“我的公司(上海)科技”,“我的公司(上海)科技”。

之前的思路是,把括号改为一致的,比如都用“中文括号”,或都用“英文括号”。
今天,有了新的思路,统一把括号去掉,这样就不会存在奇葩括号问题了。

5、项目里,SpringMVC默认响应格式为xml。

具体原因,可以参考资料。
首先访问这个
http://localhost:18004/api/query/queryCompContract?compId=256
,后台返回一个map,但是Chrome报错:

This page contains the following errors:
error on line 1 at column 7: StartTag: invalid element name
Below is a rendering of the page up to the first error.

后台debug,没看到问题。
网上找资料,发现这个错误大多是说xml格式不对。
突然想起来,默认格式xml,不支持直接显示map吗?

用json格式访问就好了。
http://localhost:18004/api/query/queryCompContract.json?compId=256
{
256: "公司不存在"
}

手动用json
@RequestMapping(value="/queryCompContract", produces={"application/json; charset=UTF-8"})

参考资料:
系统默认的设置的 media type[4]
在一些简单的环境中,比如项目返回的数据类型只需要JSON格式,可能就不需要设置 produces的类型,来指定 media type,也能够按照要求返回正常的JSON数据,这是为什么?

因为SpringMVC在项目初始化时,会去扫描系统中的JAR包,然后根据扫描到的JAR包设置默认的转换类型,大概的扫描过程是:
1)检查系统中是否存在jackson-xml的JAR包,如果存在,就将数据转换类型列表中设置XML类型,以及其对应的转换器
2)检查系统中是否存在jackson-json的JAR包,如果存在,就在数据转换类型列表中设置JSON类型,以及其对应的转换器

因为是先检测的XML,因此XML排在JSON前面,如果系统两者的JAR包都存在,那么默认情况下数据会被转换成XML格式

6、Windows系统,Telnet不可执行

控制面板->程序和功能->启用或关闭Windows功能->勾选Telnet

 

发布了1320 篇原创文章 · 获赞 2523 · 访问量 341万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 猿与汪的秘密 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览