Closed MagikLau closed 6 years ago
前端发送请求的JS代码如下,可以正常alert成功信息:
<script type="text/javascript">
function sendGroupMsg02() {
var major = $("#major").val();
var gradeClass = $("#gradeClass").val();
var textarea02 = $("#textarea02").val();
var preCheck = "";
if( textarea02 === null || textarea02 === "" ){
preCheck = "[无内容]";
}
if( preCheck.length > 0 ){//初步检查
preCheck += "异常,请先处理";
alert(preCheck);
}else {//检查无误,发送请求
$.ajax({
url: "/messages/sendByParam",
type: "POST",
data: "content="+textarea02+"&major="+major+"&gradeClass="+gradeClass,
success: function (data) {
alert('Sent successful: '+data);
window.location.href = '/messages';
},
error: function (data) {
console.log(data);
alert('error - '+data);
}
});
}
}
</script>
异常原因已查明,是群发消息成功的回调中的处理逻辑没有做空判断,现已修复。 但本地无法重现该异常,等待后续调试观察
使用LauItachi的项目WeChatPlatformApplication重现该异常,发现是因为项目中的GlobalExceptionHandler这个ControllerAdvice覆盖了默认的异常处理器
@ControllerAdvice
public class GlobalExceptionHandler {
public static final String DEFAULT_ERROR_VIEW = "error";
@ExceptionHandler(value = Exception.class)
public ModelAndView defaultErrorHandler(HttpServletRequest req, Exception e) throws Exception {
ModelAndView mav = new ModelAndView();
mav.addObject("exception", e);
mav.addObject("url", req.getRequestURL());
mav.setViewName(DEFAULT_ERROR_VIEW);
return mav;
}
}
但是视图仍然是默认的视图名,仍然会使用ErrorMvcAutoConfiguration的defaultErrorView视图来进行渲染,在渲染是defaultErrorView中需要的placeholder中的属性值在上面的mav中没有,导致了上面的报错信息。完善上面的异常处理器即可。 顺便一提,默认的异常处理器是BasicErrorController,其中的model属性是全的,包含了默认视图中需要使用的全部信息。可以参考这个controller
已在GlobalExceptionHandler的defaultErrorHandler添加打印异常入日志,感谢大佬各种姿势调试orz
经常遇到这个问题,不知道是不是因为和其他框架集成之后冲突了 集成的框架有:SpringBoot、SpringSecurity、SpringMVC、SpringDataJPA 本次错误出现在发送微信消息之后,经断点调试,在return WxMessage时会进坑,怀疑是使用微信接口和Security框架冲突了,具体情况还在检查中…… Java代码如下:
服务器报错log: