优化系统报错提示信息,提高人机交互(一)

1、常规报错及处理

package com.example.demo.controller;

import com.example.demo.service.IDemoService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@AllArgsConstructor
@RestController
@Slf4j
public class DemoController {

    private IDemoService demoService;

    @GetMapping("exceptionTest")
    public Integer exceptionTest(){
        Integer result = 0;
        Integer integer1 = 0;
        Integer integer2 = 2;
        result = integer2/integer1;
        return result;
    }

}

调用接口,返回结果如下:
优化系统报错提示信息,提高人机交互(一)_第1张图片
服务器端报错:

java.lang.ArithmeticException: / by zero
	at com.example.demo.controller.DemoController.exceptionTest(DemoController.java:21) ~[classes/:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
	....

一般接口报错,前端根据status为500可判断出服务器端报错,但是无法判定什么原因,这时候只能联系后端服务,后端根据日志判断出代码的DemoController.java:21出现bug,然后修复bug,更新程序解决问题。
这个示例中的问题明显是程序的bug,这样解决起来无可厚非,但是如果是一些复杂的系统,需要用户按照一定流程,需要进行一些配置,如果用户在某些环节操作不当,导致其他模块出错,那么这时候可以判定是系统没有错,是用户的使用问题,这时候接口不能只返回服务器报错,但是前端无法给用户一些提示信息和错误的原因,告知客户哪些地方操作不对,需要更改配置或者做一下前置操作,那么如何优化呢?
(1)加一些判断,在调用当前接口处理某些逻辑事,如果发生错误,先捕获异常,然后在catch代码块判断前置条件是否满足,不满足则返回提示信息;
(2)捕获异常并处理,返回提示信息
(3)前端在调接口前,先调一个验证接口,通过再调目标接口,如常规字段的验证,前端利用js即可完成

返回信息,有2种:第一种是在参数中返回,这种比较简单,对于一些简单的操作可采用;第二种则是抛出异常,代替参数返回,如上面的接口,发生错误,系统抛出异常,代替了接口自身返回String的方式

2、错误处理提示示例
接口修改下,2个整数相除,第二个参数除以第一个参数,返回结果
(1)对异常进行捕获,并抛出异常

@GetMapping("exceptionTest")
    public Integer exceptionTest(Integer integer1,Integer integer2){
        Integer result = 0;
        try {
            result = integer2/integer1;
        } catch (Exception e) {
            if (0 == integer1){
                throw new RuntimeException("除数不能为0");
            }

        }
        return result;
    }

优化系统报错提示信息,提高人机交互(一)_第2张图片

优化系统报错提示信息,提高人机交互(一)_第3张图片优化系统报错提示信息,提高人机交互(一)_第4张图片

发现抛出异常,但是到不了前端,这种时候前端可以判断作为除数的数,是否为0,如果为0,则直接提示,做好校验。那么假如前端不做校验,后端接口应该怎么处理呢?能不能优化

经过一番优化,达到了下面的效果
优化系统报错提示信息,提高人机交互(一)_第5张图片
这样接口返回了报错原因,前端可以提示给用户,提高了人机交互。

具体怎么实现的,请继续查看另一篇:优化系统报错提示信息,提高人机交互(二)

你可能感兴趣的:(java,人机交互,状态模式)