在进行前后段分离项目的时候,我后端springboot使用JSONObject返回数据,前端ajax请求的时候,方法能走进去,但是每次返回的时候,都报404。可是换了Map返回数据就不会出现错误,有哪位大神可以解答吗?
@ResponseBody
@RequestMapping("/test")
public Map<String, Object> set_new_pwd(HttpServletRequest request)throws Exception {
Map<String, Object> map = new HashMap<String, Object>();
String storageNo = request.getParameter("storageNo");
List<StoragePlan> list = storagePlanDao.findByStorageNo(storageNo);
if(list.size() <= 0){
map.put("count",0);
map.put("success", true);
return map;
}else{
map.put("data",list);
map.put("count",list.size());
map.put("success", true);
return map;
}
}
你看一下后台的404日志。日志中提示,404的路径是什么?都进入Controller方法了,404应该不是当前路径的问题。可能是其他的问题。
例如触发了一些异常,导致执行了异常处理。在渲染模板引擎的时候没找到。也会404。
是同一个,而且网上也有人有类似的错误,但是他们提出的解决办法都是忘记在方法头加上@ResponseBody或者@RestController,但是这些我都加上了。真的很玄学。
都进入了Controller方法,404不会是当前请求造成的。你看一下404的异常日志。提示找不到的路径是什么路径。
你就看一下请求,响应日志。404的时候,系统是去渲染了模板引擎。还是用HttpMessageConverter
编码了数据。你把关键的异常复制贴出来看看。
/**
* /mui_test/test
*/
@ResponseBody
@RequestMapping("/test")
public Map<String, Object> set_new_pwd(HttpServletRequest request)throws Exception {
//Map<String, Object> map = new HashMap<String, Object>();
JSONObject result = new JSONObject();
String storageNo = request.getParameter("storageNo");
List<StoragePlan> list = storagePlanDao.findByStorageNo(storageNo);
if(list.size() <= 0){
result.put("count",0);
result.put("success", true);
return result;
}else{
result.put("data",list);
result.put("count",list.size());
result.put("success", true);
return result;
}
}这是后端代码
但是你只要把JsonObject换成Map就不会出错
@ResponseBody
@RequestMapping("/test")
public Map<String, Object> set_new_pwd(HttpServletRequest request)throws Exception {
Map<String, Object> map = new HashMap<String, Object>();
String storageNo = request.getParameter("storageNo");
List<StoragePlan> list = storagePlanDao.findByStorageNo(storageNo);
if(list.size() <= 0){
map.put("count",0);
map.put("success", true);
return map;
}else{
map.put("data",list);
map.put("count",list.size());
map.put("success", true);
return map;
}
}
json包:net.sf.json.JSONObject
你发的这堆,看不出来为什么。叫你看后端的日志后端的日志。404的路径是什么。请求,响应的信息。
后台没异常?有日志吧。spring这种东西,你404肯定有日志显示
2020-06-03 14:11:27.463 DEBUG 3708 --- [ XNIO-1 task-1] o.s.web.servlet.DispatcherServlet : GET "/dwwqdq", parameters={}
2020-06-03 14:11:27.469 WARN 3708 --- [ XNIO-1 task-1] o.s.web.servlet.PageNotFound : No mapping for GET /dwwqdq
2020-06-03 14:11:27.489 DEBUG 3708 --- [ XNIO-1 task-1] .m.m.a.ExceptionHandlerExceptionResolver : Using @ExceptionHandler com.marmot.manager.web.advice.MarmotManagerExceptionAdvice#noHandlerFoundException(HttpServletRequest, HttpServletResponse, NoHandlerFoundException)
2020-06-03 14:11:27.498 ERROR 3708 --- [ XNIO-1 task-1] c.m.c.w.advice.AbstractExceptionAdvice : org.springframework.web.servlet.NoHandlerFoundException: No handler found for GET /dwwqdq
好吧,代码高亮显示,我以为不是错误,我错了。。。。
后端报错:
2020-06-03 14:16:04.997 WARN 19528 --- [nio-8080-exec-8] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: Object is null; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Object is null (through reference chain: net.sf.json.JSONObject["data"]->net.sf.json.JSONArray[0]->net.sf.json.JSONObject["createDateTime"]->net.sf.json.JSONNull["empty"])]
这是不是说明字段有空的值的时候,不能转换为Json?
应该是异常,导致了触发了异常处理器。异常处理器尝试渲染模板引擎。导致的404。
至于 net.sf.json.JSONObject
这东西。我没用过,我一般用 Gson
网上有人说用阿里巴巴的jar包可以解决该问题,没试过,应该可以的吧。不过这问题算是找到答案了
Fastjson经常漏洞。前天又爆出来一个,你还敢用???