The server encountered an internal error that prevented it from fulfilling this request的一种解决办法

一个异常引起的乌龙,HTTPStatus500问题的一种场景及解决办法

一、前言

    这是我在编写服务器响应判断用户数据时遇到的问题,这只是   The server encountered an internal error that prevented it from fulfilling this request  问题的一种情况,具体错误如下图所示:

二、问题描述

    我在设置某一属性  grade  时,设置为  int<11>  。在测试数据时,表单提交数据超出原设定范围,所引起的异常。

2-1 问题解决的方法

    对异常捕获,仅仅捕获了 SQLException,导致其他异常出现时,被抛出。

try{
    // ...
} catch(SQLException e) {
    e.printStackTrace();
}

捕获异常 Exception 即可

try{
    // ...
} catch(Exception e) {
    e.printStackTrace();
}

2-2 问题出现与解决

    在输入信息栏输入正确的信息,会给出正确的提示    

    处理后正确的响应结果如右图所示

三、问题解决

3-1 解决思路一

    其实问题的解决方法就是规范化开发,对填写信息的文本域填写的内容动态的监控,定义可输入的内容为数字,大小写英文,不允许输入特殊字符等控制。比如注册用户时填写用户 ID 时可通过 Ajax 动态获取后台数据,验证该 ID 是否已存在,若存在在注册页面则提示该 ID 已被注册

3-2 解决思路二

    此处我使用的是这个思路来避免该问题。当输入信息错误时,给出了不是我所写的错误处理办法,(我的错误处理办法是,给出提示:系统繁忙,稍后操作!)输入超出原定范围的数据。此处通过捕获抛出的异常进行处理,跳转到一个操作失败页面

         

    点击确定后出现的错误如下:

   

回去检查文件代码,多次修改,发现该问题的解决办法:

修改前的代码:     

修改后的代码:(红线已标出)

保存修改,重新运行程序,

输入错误的数据,给出了我所设定的处理方法:(下图所示)                          

       

 

    当出现异常时,认真检查代码的正确性,或许就是一个字符,单词的大小写或拼写错误,都够你调试一下午的。养成良好的代码风格,也是必须的。

四、其他异常补充

4.1 空指针异常(NullPointerException 先看一下)

HTTP Status 500 - Request processing failed; nested exception is 
java.lang.NullPointerException
com.dorm.action.CounsellorAction.counsellorAdd(CounsellorAction.java:123) 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
java.lang.reflect.Method.invoke(Method.java:498) 
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452) 
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291) 
...

首先sun.* 或者org.*,都是源码,这些信息不是排查Bug 的重点
一般异常抛出是自己的业务代码有漏洞, 才会触发一系列的信息抛出; 
先找异常信息中的Cause by ... 这是此次异常抛出的原因, 
然后先看异常信息中第一条和当前项目有关业务代码, 
看看信息指定的类的方法某一行为什么抛出空指针异常.
比如上面这个是自己写的CounsellorAction.java  文件中方法counsellorAdd 抛出的异常, 
运行中发现第123 行存在为null 的对象.

4.2 实体类对象转换异常

    此转换对象不能直接强制转换为被转换对象。

HTTP Status 500 - Request processing failed; nested exception is java.lang.ClassCastException:
com.zduod.core.requestentity.RequestUser cannot be cast to com.zduod.core.requestentity.RequestPay

4.3 JSON参数转换异常

    JSON数据传参异常,不能将非数字转换为数字

HTTP Status 500 - Request processing failed; nested exception is com.alibaba.fastjson.JSONException
    ...
root cause
java.lang.NumberFormatException
    java.math.BigDecimal.<init>(BigDecimal.java:494)
    java.math.BigDecimal.<init>(BigDecimal.java:383)
    java.math.BigDecimal.<init>(BigDecimal.java:806)
    com.alibaba.fastjson.util.TypeUtils.castToBigDecimal(TypeUtils.java:194)
    ...

4.4 服务器响应already committed异常

    response 是服务端对客户端请求的一个响应,其中封装了响应头、状态码、内容等;服务端在把response提交到客户端之前,会向缓冲区内写入响应头和状态码,然后将所有内容flush,即将所有缓存输出。这就标志着该次响应已经提交。

    对于当前页面already commitd 已经提交的response 就不能再使用response 执行写操作。

HTTP Status 500 - java.lang.IllegalStateException:Cannot forward a response that is already committd

4.5 前后台交互数据类型不匹配

    后台开发查询用户接口,访问接口

http://localhost:8082/dboot/eouser/queryEOUser,请求JSON数据为

{  "treasureData": "{\"userName\":\"78\",\"userId\":\"2147483648\",\"userPassword\":\"930915\"}"}

    后台响应结果

{
    "timestamp": "2018-07-13T03:05:36.261+0000",
    "status": 500,
    "error": "Internal Server Error",
    "message": "For input string: \"2147483648\"",
    "path": "/dboot/eouser/queryEOUser"
}

    接口响应错误信息为input输入数据为String类型,后台请求体封装实体类定义属性userId为Integer类型。Integer.MAX_VALUE=2147483647,此处2147483648已经不能作为Integer处理。接口数据改为-2147483648 ~ 2147483647之间的整型数据,重新请求接口,后台正常处理请求并返回结果。

{
    "eoUserList": [
        {
            "userId": 1,
            "userName": "eolinker",
            "userNickName": "eolinker",
            "userPassword": "c0bc7b2052c950c1541692eab1284937"
        }
    ],
    "errorMsg": "查询用户成功!",
    "success": true
}

4.6 Mybatis解析实体属性错误

    此处异常为类型异常;异常信息如下

HTTP Status 500 – Internal Server Error
Type Exception Report
Message Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: 
nested exception is org.apache.ibatis.reflection.ReflectionException: 
There is no getter for property named 'useId' in 'class com.zduod.manage.face.entity.ZddInformation'

    此处是因为mybatis解析属性错误,信息为useId在实体类中无对应的setter()、getter()方法。检查发现请求参数为userId,实体类属性为userId,也存在对应的setter()、getter()方法。

    此处配置文件mapper.xml中错写userId为useId导致解析数据报错,服务器无法处理请求。

<select id="getListByPage" resultMap="BaseResultMap" parameterType="com.zduod.manage.face.entity.ZddInformation">
    select
    <include refid="Base_Column_List" />
    from zdd_information
    <where>
      <if test="informationId != null" >
        and information_id = #{informationId,jdbcType=VARCHAR}
      </if>
      <if test="userId != null" >
        <!--此处写错userId为#{useId,jdbcType=DECIMAL}-->
        and user_id = #{userId,jdbcType=DECIMAL}
      </if>
    </where>
    order by create_time desc
</select>

4.7 请求数据类型语法错误

    此处异常为JSON数据存在格式错误,嵌套异常,语法错误。

HTTP Status 500 – Internal Server Error
Type Exception Report
Message Request processing failed; nested exception is com.alibaba.fastjson.JSONException: syntax error, expect {, actual string, pos 0
Description The server encountered an unexpected condition that prevented it from fulfilling the request.
Exception
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is com.alibaba.fastjson.JSONException: syntax error, expect {, actual string, pos 0

    异常信息是JSON数据存在语法错误,在 { 大括号嵌套时有问题。我这里是前端是通过JSON数据请求后端接口,仔细检查后JSON数据的格式存在如下问题:JSON请求数据中treasureData的value值嵌套的数据没有完全用{}封装。

修改前:
"treasureData": "{"userId":"2018071211901416892","userPayPassword":"100000","cashBalance":"80""
修改后:
"treasureData": "{"userId":"2018071211901416892","userPayPassword":"100000","cashBalance":"80"}"

五、其他说明

500状态码,问题出现的情况多样,请根据Exception信息分析,进行debug断点调试排查具体原因。

你可以把异常信息贴出来,放到技术问答https://ask.csdn.net/去提个问题,会有人帮助你分析处理问题。

你可以把关键异常信息贴在此文评论区,没有异常信息无法确定具体原因。

  • 38
    点赞
  • 114
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 165
    评论
### 回答1: 抱歉,服务器遇到了内部错误,无法完成您的请求。异常情况可能是导致服务器无法正常处理请求的程序错误、配置问题或者其他一些问题。建议您尝试重新加载页面或者稍后再次尝试。如果问题仍然存在,请联系网站管理员以获取帮助。 ### 回答2: 错误提示:“服务器遇到了内部错误,无法完成此请求。exception。” 这是一个服务器的错误提示,意味着服务器无法完成您对其发出的请求。对于互联网用户而言,这可能是非常令人沮丧的。您可以尝试重新加载页面或稍后再试,但这往往不会解决问题。 更好的解决方法是检查服务器的错误日志以了解问题的根本原因。根据根本原因,您可能需要采取不同的措施来解决该问题。 通常,服务器出现此错误可能是由于以下原因: 1. 服务器内部程序出现问题,例如配置错误、权限问题或任何其他技术问题。 2. 服务器过载或超负荷,导致服务器无法处理您的请求。 3. 与服务器交互的连接丢失或中断。 为了解决此问题,您可以采取以下步骤: 1.尝试刷新页面并等待几分钟,以便服务器解决任何临时问题。 2. 如果您能够查看服务器的错误日志,请查看该日志以了解问题的根本原因。 3. 与网站管理员或技术支持人员进行联系,并向他们报告此问题。 4. 如果您是访问本公司的网站,请联系公司的IT支持部门。 总之,当您遇到类似的错误提示时,最好不要轻易放弃。您可以采取上述措施来尝试解决问题。如果问题仍然存在,请寻求更高级别的技术支持。 ### 回答3: "The server encountered an internal error that prevented it from fulfilling this request." Exception指的是服务器内部发生错误并且无法完成客户端请求。这种异常可能被触发的原因很多,包括但不限于以下几点: 1、服务器硬件故障或网络故障:如果服务器出现硬件故障或者网络故障,就会导致异常的产生,服务器无法正常响应客户端请求。 2、服务器软件错误:如果服务器上的软件出现错误,可能会阻止服务器完成客户端请求。这些错误可能包括程序内存泄漏、缺少安全补丁、配置文件错误等。 3、异常的客户端请求:客户端发送的请求也有可能触发异常。例如,客户端请求超过服务器负载的限制,或者客户端传递了错误的参数。 4、访问权限不足:在一些特定的情况下,客户端可能会尝试访问没有权限的资源,或是使用错误的凭证进行访问。 为了解决这个异常,我们需要先确定其产生的原因。然后,我们可以尝试以下方法: 1、检查服务器硬件和网络连接,确保它们正常运行。 2、查看服务器端的日志文件,查找问题所在。如果是软件错误,则需要进行修复。 3、检查客户端请求,确保它们符合服务器规定和限制。 4、检查权限。如果客户端没有足够的权限,则需要升级其权限或更改访问路径。 总之,这个异常是服务器内部错误的一种表现,需要我们进行详细分析和排除,以便于后续进行修复。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 165
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

niaonao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值