Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >页面和Ajax调用Spring异常处理

页面和Ajax调用Spring异常处理
EN

Stack Overflow用户
提问于 2016-10-03 02:14:59
回答 2查看 3.5K关注 0票数 2

我通过了春季异常处理文档,我没有掌握如何处理ajax调用未处理的输出的想法。

在一个应用程序中,处理页面请求、未处理异常和ajax调用未处理异常的简便方法是什么?

这可能是一个问题,因为全局异常处理程序还会捕获ajax调用并返回“专用错误页”,其中包含大量内容,从而防止为ajax错误回调提供很小的错误答复。

EN

回答 2

Stack Overflow用户

发布于 2016-10-03 02:33:07

在rest控制器中有三种处理异常的方法:

用@ResponseStatus和正确的HTTP结果代码注释您的异常,这些代码在抛出异常时应该返回。

例如:如果引发PersonNotFoundExcepition,则将HTTP404返回给客户端(未找到)

代码语言:javascript
运行
AI代码解释
复制
@ResponseStatus(HttpStatus.NOT_FOUND)
public class PersonNotFoundException {}

另一种方法是在控制器中带有@ExceptionHandler注释的方法。在@ExceptionHandler注释的值中,您定义了应该捕获哪些异常。此外,还可以在同一方法上添加@ResponseStatus注释,以定义应该将哪些HTTP结果代码返回给客户端。

代码语言:javascript
运行
AI代码解释
复制
@ResponseStatus(HttpStatus.NOT_FOUND)
@ExceptionHandler({PersonNotFoundException.class})
public void handlePersonNotFound() {
  ...
}

首选方法:将ResponseEntityExceptionHandler接口实现为@ControllerAdvice。通过这种方式,您可以将异常处理逻辑应用于所有具有集中异常处理的控制器。您可以在教程这里中阅读更多内容。

代码语言:javascript
运行
AI代码解释
复制
@ControllerAdvice
public class CustomResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {
    ...
    @Override
    protected ResponseEntity<Object> handleHttpMediaTypeNotSupported(HttpMediaTypeNotSupportedException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
        String unsupported = "Unsupported content type: " + ex.getContentType();
        String supported = "Supported content types: " + MediaType.toString(ex.getSupportedMediaTypes());
        ErrorMessage errorMessage = new ErrorMessage(unsupported, supported);
        return new ResponseEntity(errorMessage, headers, status);
    }
    ...
}

请注意,对于所有类型的异常,不应返回泛型500 - Internal server error。通常,您希望有400 s的结果范围客户端错误-错误的请求。和500 s的结果代码范围到服务器端的错误。此外,最好根据发生的情况返回更具体的代码,而不是仅仅返回400或500。

票数 2
EN

Stack Overflow用户

发布于 2017-05-12 00:03:23

我在全局异常处理程序中使用请求头将ajax调用和序号页请求拆分为不同的解决方案。对于ajax、无效用户输入、异常类型和内部服务器错误,也有不同的错误响应。

代码语言:javascript
运行
AI代码解释
复制
...
public class Application extends SpringBootServletInitializer {

@Bean(name = "simpleMappingExceptionResolver")
public SimpleMappingExceptionResolver createSimpleMappingExceptionResolver() {
    SimpleMappingExceptionResolver r = new SimpleMappingExceptionResolver();
    r.setDefaultErrorView("forward:/errorController");
    return r;
}
代码语言:javascript
运行
AI代码解释
复制
@Controller
public class ErrorController {

    public static final Logger LOG = Logger.getLogger(ErrorController.class);

    @RequestMapping(value = "/errorController")
    public ModelAndView handleError(HttpServletRequest request,
            @RequestAttribute("exception") Throwable th) {

        ModelAndView mv = null;
        if ("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))) {
            if (isBusinessException(th)) {
                mv = new ModelAndView("appAjaxBadRequest");
                mv.setStatus(BAD_REQUEST);
            } else {
                LOG.error("Internal server error while processing AJAX call.", th);
                mv = new ModelAndView("appAjaxInternalServerError");
                mv.setStatus(INTERNAL_SERVER_ERROR);
            }
            mv.addObject("message", getUserFriendlyErrorMessage(th).replaceAll("\r?\n", "<br/>"));
        } else {
            LOG.error("Cannot process http request.", th);
            mv = new ModelAndView("appErrorPage");
            mv.addObject("exeption", th);
        }

        return mv;
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39829252

复制
相关文章
编程篇(006)-请写出以下代码的执行结果
(function() { fn(); var fn = function() { alert(1); } fn(); function fn() { alert(2) } })() 参考答案: 第一次弹出2,第二次弹出1 解析: // 变量提升之后的代码: (function() { function fn() { alert(2) } var fn; fn(); // 弹出2
齐丶先丶森
2022/05/12
2650
编程篇(007)-请写出以下代码的执行结果
以上两个例子中,除了var aValue = e;这一句位置不同:例1位于外层匿名函数中、例2位于内层匿名函数中,其他部分完全相同。为什么结果不同?
齐丶先丶森
2022/05/12
3280
hibernate for循环执行添加操作出错问题
hibernate插入对象的时候,对于id唯一,数据库设置为自增的时候执行完操作后会将id赋予该对象
陈灬大灬海
2018/09/12
8130
hibernate for循环执行添加操作出错问题
Oracle——无法在查询中执行 DML 操作
create or replace function test_f(id varchar2) return varchar2 is Result varchar2(100); begin insert into sfcs_temp_17109 (sn)values(id);
_一级菜鸟
2019/09/10
4.4K0
Oracle——无法在查询中执行 DML 操作
Oracle中执行truncate操作出现hang
同事说某套Oracle中有一张94G容量的表需要清空,用delete删除的,但是一直卡着。
bisal
2021/11/08
6880
JS动态添加表单
<script type=”text/javascript”> function addRow()<!–js实现添加一行内容!–> { var tr=document.createElement(“tr”); var td=document.createElement(“td”); var input=document.createElement(“input”); input.setAttribute(“type”,”file”); input.setAttribute(“name”,”image[]”)
苦咖啡
2018/05/07
14.2K0
oracle 添加执行上一条指令 安装rlwrap
https://linux.linuxidc.com/index.php?folder=cHViLzIwMTEvMDcvMDQvcmx3cmFw rpm -ivh http://mirror.cent
用户5760343
2022/05/20
3930
Oracle 利用执行计划来避免排序操作
在Oracle中,利用index来避免排序 SQL> CREATE TABLE T_NOSORT (ID NUMBER PRIMARY KEY, NAME VARCHAR2(30) NOT NULL); SQL> CREATE INDEX IND_T_NOSORT_NAME ON T_NOSORT(NAME); SQL> INSERT INTO T_NOSORT SELECT ROWNUM, TABLE_NAME FROM USER_TABLES; SQL> COMMIT; SQL> SET AUTOT O
星哥玩云
2022/08/17
3430
Oracle中对临时表空间执行shrink操作
《Oracle一个诡异的临时表空间不足的问题》中提到对临时表空间执行shrink space的操作,以前一直理解只有对表能做shrink space的操作,但从官方文档看,11g开始,就可以对临时表空间执行相同的操作。
bisal
2022/09/19
5730
Oracle中对临时表空间执行shrink操作
《Oracle一个诡异的临时表空间不足的问题》中提到对临时表空间执行shrink space的操作,以前一直理解只有对表能做shrink space的操作,但从官方文档看,11g开始,就可以对临时表空间执行相同的操作。
bisal
2022/09/19
4920
14表单操作
表单操作 获取表单 获取表单元素 通过常规方式 Document对象方式。document.getElementById('form')等。 通过Document的属性forms ``document.forms` 返回结果为HTMLCollection。 通过表单的name名字。 此方法不推荐。因为在新版本的浏览器中可能不再支持。 如果返回结果为一个时类型为对象,多个时是集合。 获取表单组件元素 常规方式 Document对象方式。document.getElementById('form_input
Dreamy.TZK
2020/05/15
3860
ElementUI动态添加表单项
chao超的搬运文章
2023/10/15
3310
Hplus框架动态添加选项卡功能(扩展)
hplus框架确实是后端开发人员的福音,但是有很多功能没有实现,我根据网上大神的做法,实现了动态添加选项卡来打开新页面的功能。
别团等shy哥发育
2023/02/25
7770
Hplus框架动态添加选项卡功能(扩展)
WPF实现选项卡效果(3)——自定义动态添加的AvalonDock选项卡内容
  在前面一篇文章里面,我们实现了AvalonDock选项卡的动态添加,但是对于选项卡里面的内容,我们并没有实现任何有用的功能。   这篇文章里面,我们将实现对选项卡里面的内容和功能实现自定义。 完整系列   ● 第一部分   ● 第二部分   ● 第三部分 在Git中下载工程源码
全栈程序员站长
2022/09/13
1.7K0
WPF实现选项卡效果(3)——自定义动态添加的AvalonDock选项卡内容
JQuery表格表单操作
1、多选框应用代码示例 <form action=”#” method=”post”> 你喜欢的明星是?<br /> <input type=”checkbox” name=”boxs” value=”张嘉译” id=”1″ /><label for=”1″>张嘉译</label> <input type=”checkbox” name=”boxs” value=”周润发” id=”2″ /><label for=”2″>周润发</label> <input type=”checkbox” name=”bo
苦咖啡
2018/05/07
1.6K0
jquery 操作表单表格
$("tr:contains('王五')").addClass("selected")
用户5760343
2019/10/08
1.6K0
jquery 操作表单表格
oracle添加not null约束
大家好,又见面了,我是你们的朋友全栈君。在创建表时,为列添加not null约束,形式如下: column_name data_type [constraint constraint_name] not null 其中,constraint constraint_name 表示为约束指定名称。 也可以为已创建的表中添加not null约束,这时就需要使用alter table… modify语句,形式如下: alter table table_name modify column_name [constraint constraint_name] not null;
全栈程序员站长
2022/09/06
8130
用 PyQt 打造具有专业外观的 GUI
如果您一直在创建表单以执行将数据输入数据库等操作,那么QFormLayout适合您。此类将小部件布置为两列布局。第一列通常显示描述预期输入的标签,第二列通常包含允许用户输入或编辑数据的输入小部件,例如QLineEdit,QComboBox或QSpinBox。
sergiojune
2021/07/19
2.9K0
用 PyQt 打造具有专业外观的 GUI
Contact Form 7插件添加表单教程
作为一个网站所有者,你绝对应该学习如何添加一个联系表单到WordPress。你的网站不是一个匿名实体。大多数人都想知道,偶尔也会和他们所读内容背后的人互动。你认为为什么会有作者简介和博客评论?今天外贸
Hoan外贸建站
2020/12/03
1.9K0
dreamweaver添加表单_dreamweaver网页制作代码
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/169646.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/22
1.8K0
dreamweaver添加表单_dreamweaver网页制作代码

相似问题

如何构造Python包(?)要向各个模块添加文件,请执行以下操作

13

要向选项卡添加更具描述性/更有意义的id名称,请执行以下操作

22

要添加文件,请执行以下操作

10

Jquery:如果选中单选按钮A,请执行以下操作。如果检查B,请执行以下操作

27

若要在表中添加列表项,请执行以下操作

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档