thinkphp 抛出异常后不返回错误页面 改成返回json字段

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/OnePiece_only/article/details/80110593

虽然不建议该tp底层代码,但我没有找到其他方法,如果有其他解答这问题的方法,麻烦留言

thinkphp5 开启debug后,当报错后会出现较详细的内容
如果关闭debug 则出现 页面错误,请稍后再试

现在要跟前端合作,然后要保证不管访问什么连接都要返回一个json自读不能返回错误页面

然后你就找而配置文件呀 好不容易看error_message 把它改成了{"status":500 , "description" : "服务器错误!"} 结果吧显示出来的呢是json格式了 结果却还是错误页面,只不过内容是这个

然后你把thinkphp5框架整个翻了一遍 你会发现框架出现错误后会加载thinkphp下面的tpl中的...tpl文件  

上面都是废话,解决方法如下:
找到项目目录下的\thinkphp\library\think\exception中的Handle.php
然后找到convertExceptionToResponse方法
你会发现 $response = new Response($content, 'html');
因为你要放回json格式的数据
改成如下内容
$content = json_encode(['status' => 500]);
$response = new Response($content, 'json');
注意要屏蔽
 //include Config::get('exception_tmpl');
然后框架错误,就会出现你刚定义的内容了

以下为新的解决方案
其实不用改底层文件 因为在 config中有个 exception_tmpl ,只要改这个文件就可以,如定义一个404.html的html页面 或者定义一个404.tpl

 'exception_tmpl'         => APP_PATH.'404.tpl',

在application中创建一个404.html的文件

html中写如下内容
{"status":500,"description":"服务器错误"}
返回的就是json字段了
展开阅读全文

getInputStream()抛出异常后,如何取得实际返回json语句?

08-26

先上代码(HttpsUrlConnection客户端):rn[code=java]rn inputStream = httpsConn.getInputStream(); // 在这个地方抛出异常rn InputStreamReader isr = new InputStreamReader(inputStream);rn BufferedReader reader = new BufferedReader(isr);rn rn StringBuilder stringBuilder = new StringBuilder();rn String strReadLine = null;rn while ((strReadLine = reader.readLine()) != null) rn stringBuilder.append(strReadLine).append("\r\n");rn rn rn httpsResp.strRespBody = stringBuilder.toString();rn httpsResp.iRespStatusCode = httpsConn.getResponseCode();rn httpsResp.strRespMessage = httpsConn.getResponseMessage();rn httpsResp.iCheckValid = 1;rn httpsResp.respHeaders = httpsConn.getHeaderFields();rn[/code]rnrn正常情况下,上述代码根据getInputStream可以读出服务器返回的json语句。rn但在向服务器发送错误的json语句请求体之后,服务器会返还400错误,并附带json语句用于描述错误消息。如下:rnHTTP/1.1 400 Bad RequestrnServer: TenginernDate: Wed, 26 Aug 2015 11:12:11 GMTrnContent-Type: application/json;charset=utf-8rnContent-Length: 180rnConnection: keep-alivernCache-Control: no-cache,no-storernPragma: no-cachernrn"code":111,"error":"Invalid value type for field 'Relation01',expect type is :className \"Test01\", :type \"Relation\",but it is ':className \"Test02\", :type \"Relation\"'."rnrn请问高手,此时,由于400错误,getInputStream()的调用会抛出异常(导致inputStream变量为null),跳转到异常处理之后,如何取得服务器发送过来的json语句。rn 论坛

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