`

SpringBoot 异常区分页面请求或Json请求

 
阅读更多

 

@RestController

public class RestErrorEndpoint implements ErrorController {

 

@Override

public String getErrorPath() {

return null;

}

 

    @RequestMapping(value = {"${server.error.path:${error.path:/error}}"},produces="application/json")  

    @ResponseBody  

    public String error(HttpServletRequest request) {  

    System.out.println("json");

    return "helloError";

    } 

 

@RequestMapping(  value = {"${server.error.path:${error.path:/error}}"},  produces = {"text/html"}  )  

   public ModelAndView errorHtml(HttpServletRequest request) {  

System.out.println("html");

       return new ModelAndView("/error/error");  

   }  

 

//    @RequestMapping({"${error.path:/error}"})  

//    @ResponseBody  

//    public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) {  

//        Map body = this.getErrorAttributes(request, this.getTraceParameter(request));  

//        HttpStatus status = this.getStatus(request);  

//        return new ResponseEntity(body, status);  

//    } 

 

}

 

spring boot 根据Accept头的内容,输出不同格式的错误响应。比如针对浏览器的请求生成html页面,针对其它请求生成json格式的返回。字段为accept的text/html的内容来判断。

produces = {"text/html"} 页面请求。

produces="application/json"为json或ajax请求

 

 

============================================================

 

 

 

 

 

 

最近开始使用springboot,发现一个奇怪的现象,一个url报错

使用浏览器地址请求返回一个html界面

 

[plain] view plain copy
 
  1. Whitelabel Error Page  
  2.   
  3. This application has no explicit mapping for /error, so you are seeing this as a fallback.  
  4.   
  5. Tue Nov 29 10:48:26 CST 2016  
  6. There was an unexpected error (type=Bad Request, status=400).  
  7. Required String parameter 'fileName' is not present  



使用postman请求返回一个json格式的响应

 

[plain] view plain copy
 
  1. {  
  2.     "timestamp": 1480388264722,  
  3.     "status": 400,  
  4.     "error": "Bad Request",  
  5.     "exception": "org.springframework.web.bind.MissingServletRequestParameterException",  
  6.     "message": "Required String parameter 'fileName' is not present",  
  7.     "path": "/file/delete"  
  8. }  


究竟spring boot怎么来区分这种请求返回不同格式的数据的呢。经过一步步跟进。精髓在BasicErrorController这个类上

 

[java] view plain copy
 
  1. @RequestMapping(  
  2.         value = {"${error.path:/error}"},  
  3.         produces = {"text/html"}  
  4.     )  
  5.     public ModelAndView errorHtml(HttpServletRequest request) {  
  6.         return new ModelAndView("error"this.getErrorAttributes(request, false));  
  7.     }  
  8.   
  9.     @RequestMapping({"${error.path:/error}"})  
  10.     @ResponseBody  
  11.     public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) {  
  12.         Map body = this.getErrorAttributes(request, this.getTraceParameter(request));  
  13.         HttpStatus status = this.getStatus(request);  
  14.         return new ResponseEntity(body, status);  
  15.     }  

 

spring boot 根据Accept头的内容,输出不同格式的错误响应。比如针对浏览器的请求生成html页面,针对其它请求生成json格式的返回。字段为accept的text/html的内容来判断

分享到:
评论

相关推荐

    springboot编程中在google浏览器格式化显示json格式数据

    例如,"JSON Viewer"会以树形结构展示数据,而"Pretty JSON"则提供了颜色编码,使得键值对更易区分。 以"JSON Formatter"为例,安装步骤如下: 1. 打开Chrome扩展商店,搜索"JSON Formatter"。 2. 在搜索结果中...

    spring boot 统一JSON格式的接口返回结果的实现

    在Spring Boot项目开发中,为了确保前后端分离的项目之间通信的一致性和可维护性,通常会规定统一的JSON格式作为接口的返回结果。实现这一目标通常包括以下几个关键步骤: 1. 定义统一的JSON返回格式 首先需要定义...

    spingmvc+mybatis+统一异常处理机制

    统一异常处理会区分前端是否ajax请求,自动返回json数据格式,要求开发人员在处理ajax请求时统一封装成一个对象返回,以符合代码统一规范。 此工程在idea环境编写,导入请自己新建工程手工复制代码导入。

    SpringBoot+Mybatis-Plus使用webSocket实现一对一聊天 后台

    【SpringBoot+Mybatis-Plus使用webSocket实现一对一聊天后台】的实现主要涉及以下几个关键知识点: 一、WebSocket协议 WebSocket是一种在单个TCP连接上进行全双工通信的协议,它使得客户端和服务器之间的数据交换变...

    Spring Boot统一异常处理最佳实践(拓展篇)

    本文主要介绍了 Spring Boot 统一异常处理的拓展篇,包括区分请求方式、错误页面处理和自定义 HTTP 错误状态码等内容。通过这些内容,我们可以更好地理解 Spring Boot 的统一异常处理机制,并且能够根据实际情况进行...

    springboot235基于SpringBoot的房屋交易平台的设计与实现.zip

    3. Thymeleaf或Freemarker:作为视图模板引擎,用于动态渲染页面。 4. MySQL:作为数据存储,处理房源、订单等信息。 5. Redis:可能用于缓存管理和分布式锁。 6. Swagger:用于API文档的生成和调试,提高开发效率。...

    课程设计作业:基于SpringBoot + Vue开发的商城系统.zip

    1. **数据访问**:通过Spring Data JPA或MyBatis等库,SpringBoot可以轻松处理数据库操作,如CRUD(创建、读取、更新、删除)。 2. **RESTful API**:构建RESTful服务,提供JSON格式的数据接口供前端调用。 3. **...

    基于SpringBoot的论坛系统源码数据库.zip

    《基于SpringBoot的论坛系统源码数据库》是一个典型的Java Web项目,主要采用了SpringBoot框架,结合SSM(Spring、SpringMVC、MyBatis)架构和JSP技术,旨在实现一个功能完善的在线讨论平台。本项目的核心是利用...

    基于SpringBoot的在线考试系统.zip

    管理员或教师可以发布公开或私有考试,考生在规定时间内进行答题。 六、成绩统计模块 成绩统计模块自动计算考生的得分,并根据需求生成各类统计报告,如平均分、最高分、最低分等,便于教师了解学生学习状况。 七...

    spring boot 默认异常处理的实现

    如果是浏览器发起的请求,Spring Boot 会返回 HTML 错误页面,而如果是非浏览器请求,Spring Boot 会返回 JSON 错误信息。为了区分这两种请求,我们可以使用请求头中的 `Accept` 字段来判断请求的类型。 本文详细...

    基于Springboot的旅游网站.zip

    5. **API版本控制**:为确保向后兼容,项目可能会实施API版本管理,例如通过URL路径或请求头中的`Accept-Version`字段来区分不同版本的接口。 6. **错误处理和日志记录**:Spring Boot内置了错误处理机制,同时通过...

    基于springboot的保险理赔系统源码.zip

    1. **控制器(Controllers)** - 处理HTTP请求,将数据传递给服务层进行业务逻辑处理,并返回视图或JSON响应。 2. **模型(Models)** - 定义业务对象,如理赔单、用户信息等,通常与数据库表结构对应。 3. **服务...

    基于Springboot+Vue师生共评的作业管理系统源码案例设计.zip

    《基于Springboot+Vue的师生共评作业管理系统源码解析》 在当今信息化教育的时代,一个高效的作业管理系统对于提升教学质量和效率至关重要。本系统——"基于Springboot+Vue的师生共评作业管理系统",旨在为教师与...

    SpringBoot RESTful API 架构风格实践.docx

    ### SpringBoot RESTful API 架构风格实践 #### 1. RESTful API 概述 ##### 1.1 什么是 RESTful API REST (Representational State Transfer) 是一种软件架构风格,它定义了一系列规则和约束条件,用于构建分布式...

    一款简单微信小程序个人博客。后端基于SpringBoot实现.zip

    1. **小程序前端代码**:主要包括`app.js`(全局配置)、`app.json`(应用配置)、`app.wxss`(全局样式)以及各个页面的`.js`、`.json`、`.wxml`(结构文件)和`.wxss`(样式文件)等。这些文件构成了微信小程序的...

    springboot-swagger-projects.rar

    SpringBoot-Swagger 项目是将流行的API框架Swagger与SpringBoot结合使用的一个示例工程,旨在简化RESTful API的文档创建和测试过程。Swagger提供了一种标准且规范的方式来定义和构建RESTful API,并且能够自动生成与...

    springboot作业提交批改系统(源码+数据库)011229

    - **身份验证与授权**:可能使用Spring Security或JWT(JSON Web Tokens)来处理用户认证和权限控制。 - **国际化**:通过Spring的MessageSource实现多语言支持,为用户提供中英文切换的功能。 开发者在实施此项目...

    Spring Boot mybatis plus layui 企业后台管理平台

    根据请求方式区分返回 json 数据还是错误页面. Logback MDC 支持, 将当前登录人和操作者 IP 加入日志中. JSR-303 数据校验 运行环境 JDK 1.8 MySQL 5.7 Redis 配置文件 打开 application.properties 修改 MySQL 和 ...

    基于拟合预测算法和SpringBoot框架的电力数据可视化系统的设计与实现.docx

    SpringBoot简化了Maven配置,使得服务器设置和开发流程更为便捷,同时通过JSON数据格式提升数据交换的安全性和效率。 该系统设计了三个主要界面:用户界面、电力系统界面和管理员界面,以满足不同角色的需求。系统...

    spring boot security学习练习demo源码

    8. **异常处理**:Spring Security处理未授权和未认证的异常,你可以自定义错误页面或者全局异常处理器来优雅地展示错误信息。 9. **JWT支持**:尽管在描述中没有明确提及,但Spring Security可以与JSON Web Token...

Global site tag (gtag.js) - Google Analytics