Spring MVC接口总是默认返回XML的问题排查

昨天同事用了我写的WSDL对接代码后,整个Spring MVC项目接口总是返回XML格式,而不是以前的JSON格式。我也是第一次遇到这个问题,觉得很好奇,所以帮忙排查了原因。 排查过程: 其中一个接口代码如下: @RequestMapping(value = "sms/sendsms") @ResponseBody public ResultInfo sendSmsHandler(@RequestParam(defaultValue = "") String otherPhones, @RequestParam(defaultValue = "") String msgText, HttpServletRequest request) throws Exception{ otherPhones = checkAndConvertStr(otherPhones); msgText = checkAndConvertStr(msgText);…

升级jetbrain idea 2019.2后,maven编译报错,提示重复的类

升级jetbrain idea 2019.2后,maven编译报错,提示重复的类 打开项目,看到idea的更新提示有新版本2019.2,我想都没想直接点了升级,结果升级后,maven编译同样的项目,总是提示”xxx重复的类”。 尝试解决的过程: 1.搜索代码是否有java类重复。 结果:没有发现。 2.maven依赖问题,clean后重新导入。结果:无效。 3.使用maven依赖检测插件,看是否有重复依赖。 结果:没发现。 4.怀疑idea升级导致的。结果:重新安装2019.1.3版本的idea,可以正常编译。 问题原因: 因为我一直使用的是idea自带的maven,而 2019.2版本的idea的maven升级了,从maven3.3.9升级到了最新的3.6.1,但是这个版本的maven有bug,会在编译时重复将当前目录加入到classpath,导致编译时总会报重复的类。(该mavenbug见:https://issues.apache.org/jira/browse/MNG-6649 )。 解决办法: 下载maven3.6.0,然后修改idea的maven路径,指向3.6.0,然后重新编译,一切正常。 总结: 对于一些常用的编译打包工具,最好还是一直使用固定版本,不要用ide自带的,避免频繁更新,导致编译失败等问题。

正则表达式——lookahead and lookbehind

lookahead and lookbehind的概念 假设有字符串“ABC” ,如果我们要匹配B,可以有两种描述方法: lookahead:即后面跟着“C”的字符串。 lookbehind:即前面以“A”开头的的字符串。 这两种描述都能匹配到“B”,只是描述的条件不一样。 lookahead 我们知道正则表达式中“|”等价于 OR, 即,同时可以匹配 aaa或bbb。那么正则表达式中是否有对应的类似 AND 的操作呢,例如,我们验证一个密码强度是否同时满足以下几个要求: 必须包含小写字母 必须包含大写字母 必须包含数字 必须包含特殊符号 长度必须大于8 通常,对于上面的几个要求,我们都是把这5个要求拆分成5个单独的正则表达式来进行验证,但是现在要求你用一行正则搞定,怎么办呢? 答案就是正则中的“ a non-consuming regular expression”,其中 lookahead就是最常用的一种,又可分为positive lookahead assertion (?=expr)…

Unicode(0xb) error-An invalid XML character (Unicode: 0xb) was found in the element content of the document.

问题描述: 今天对接接口的时候,在解析对方的xml时,报了这样一个错误“Unicode(0xb) error-An invalid XML character (Unicode: 0xb) was found in the element content of the document.” 原因分析: 报错提示是说,xml中有一个非法的xml字符(Unicode: 0xb),unicode编码的0xb表示垂直tab( vertical tab,VT),在notepad++之类的文本编辑器中,显示为VT。详情见:https://en.wikipedia.org/wiki/Tab_key。 如有以下unicode编码后的文本: %u63a5%u53d7%0b%u3002 unicdoe解码后,notepad++中的显示,可以看到VT字符: 对于xml 1.0来说,它的合法的字符范围应该是(见:https://en.wikipedia.org/wiki/Valid_characters_in_XML#XML_1.0): XML 1.0 Unicode…

idea使用ant编译打包报错:GC overhead limit exceeded 的解决办法

上周给公司的一个项目分支打包手机后台代码,使用的是idea自带的ant编译打包,结果死活报错: GC overhead limit exceeded 看样子是jvm的heap不够,然后我直接在idea的compiler设置里修改heap,加大到2g,但是依然报这个错,google了半天都是网上的那几种方法,没什么效果,有点抓狂了,急着发更新,没辙,只能先去睡觉了。 第二天突然想到,使用idea自带的ant编译打包,ant也是个java程序,是不是在运行ant的时候,heap参数太小了呢?赶紧打开idea的ant参数配置界面: 坑,还真是运行ant时,heap设置太小了,idea默认才给了128M,如果遇到大点的项目不但可能报GC overhead limit exceeded,还会影响编译打包速度。最后,把Maximum heap改为2048,Maximum stack size改为1024,重新打包,没有报错了。 后记: 没有找到在哪里可以指定idea给所有ant项目设置一个默认的heap大小,谁要是知道在哪里,希望能告知下,谢谢。 来自为知笔记(Wiz)

报错:’oracle.jdbc.driver.OracleTypes’ is not public in ‘oracle.jdbc.driver’. Cannot be accessed from outside package

错误提示: ‘oracle.jdbc.driver.OracleTypes’ is not public in ‘oracle.jdbc.driver’. Cannot be accessed from outside package 原因: 这是因为项目用到的oracle jdbc的jar包太老了,在ojdbc14.jar中,OracleTypes类是public的,而到了oracle 11g的驱动中,比如ojdbc5.jar ,ojdbc6.jar中,这个类源码如下: class OracleTypes extends oracle.jdbc.internal.OracleTypes { private static final String _Copyright_2007_Oracle_All_Rights_Reserved_ = null;…