`

REST中处理异常的最简单方法

阅读更多
在rest中,其实如果要抛出异常或者给出出錯信息,返回的相关的HTTP 状态码,最简单的
方法就是使用ResponseEntity,马上看例子:


@Controller
public class EmpController 
{
    List<Employee> list = new ArrayList<Employee>();  
     
    //Steps followed in this code are:
    //1) Validate the input
    //2) Do processing
    //3) Return appropriate HTTP code and message.
 
    @RequestMapping(value = "/getEmp/{emp}", method = RequestMethod.GET)
    public ResponseEntity<?> getEmployee(@PathVariable("emp") int empid) {
        if(empid < 0) {
            return new ResponseEntity<String>("Employee Id is not valid.", HttpStatus.BAD_REQUEST);
        }
         
        for (Iterator<Employee> iterator = list.iterator(); iterator.hasNext();) {
            Employee emp = (Employee) iterator.next();
            if(emp.getEmpId()==empid) {
                return new ResponseEntity<Employee>(emp,HttpStatus.OK);
            }
        }
        return new ResponseEntity<String>("Employee with id: " + empid + " not found.", HttpStatus.NOT_FOUND);
    }
 
    @RequestMapping(value = "/removeEmp/{emp}", method = RequestMethod.DELETE)
    public ResponseEntity<?> removeEmployee(@PathVariable("emp") int empid) {
        if(empid < 0) {
            return new ResponseEntity<String>("Employee Id is not valid.", HttpStatus.BAD_REQUEST);
        }
 
        for (Iterator<Employee> iterator = list.iterator(); iterator.hasNext();) {
            Employee emp = (Employee) iterator.next();
            if(emp.getEmpId()==empid) {
                iterator.remove();
                return new ResponseEntity<String>("Employee Successfully removed.", HttpStatus.OK);
            }
        }
        return new ResponseEntity<String>("Employee Not found.", HttpStatus.NOT_FOUND);
    }
 
    @RequestMapping(value = "/addEmp", 
            method = RequestMethod.POST)
    public ResponseEntity<?> addEmployee(@RequestBody Employee emp) {
 
        if(emp.getEmpId() < 0) {
            return new ResponseEntity<String>("Employee Id is not valid.", HttpStatus.BAD_REQUEST);
        }
 
        if(StringUtils.isBlank(emp.getDeptName())) {
            return new ResponseEntity<String>("Department name is not valid.", HttpStatus.BAD_REQUEST);
        }
 
        for (Iterator<Employee> iterator = list.iterator(); iterator.hasNext();) {
            Employee tempEmp = (Employee) iterator.next();
            if(tempEmp.getEmpId()==emp.getEmpId()) {
                return new ResponseEntity<String>("Employee already present. No need to add again", HttpStatus.OK);
            }
        }
        list.add(emp);
        return new ResponseEntity<String>("Employee Successfully Added", HttpStatus.OK);
    }
 
    @RequestMapping(value = "/updateEmp", 
            method = RequestMethod.PUT)
    public ResponseEntity<?> updateEmployee(@RequestBody Employee emp) {
        if(emp.getEmpId() < 0) {
            return new ResponseEntity<String>("Employee Id is not valid.", HttpStatus.BAD_REQUEST);
        }
 
        if(StringUtils.isBlank(emp.getDeptName())) {
            return new ResponseEntity<String>("Department name is not valid.", HttpStatus.BAD_REQUEST);
        }
         
        for (Iterator<Employee> iterator = list.iterator(); iterator.hasNext();) {
            Employee tempEmp = (Employee) iterator.next();
            if(tempEmp.getEmpId()==emp.getEmpId()) {
                tempEmp.setDeptName(emp.getDeptName());
                return new ResponseEntity<String>("Employee Successfully updated", HttpStatus.OK);
            }
        }
        return new ResponseEntity<String>("Employee Not found.", HttpStatus.NOT_FOUND);
    }
 
    @ExceptionHandler
    public ResponseEntity<String> exceptionHandler(Exception e){
        e.printStackTrace();
        return new ResponseEntity<String>("An internal error occurred while processing your request.", HttpStatus.INTERNAL_SERVER_ERROR);
    }
}


分享到:
评论
1 楼 Carvendy许 2016-11-14  


你在客户端是怎么获取的呢?

相关推荐

    Java 调用Http Rest接口 例子说明

    2. **异常处理**:在网络请求过程中可能会遇到各种异常,因此建议对可能出现的异常进行适当的捕获和处理。 3. **连接管理**:为了提高性能和资源利用率,应该在请求完成后及时释放连接资源。 #### 五、总结 本文...

    GetJson是从REST服务接收JSON数据的最简单HTTP库

    3. **错误处理**:提供方便的异常处理机制,帮助开发者捕获和处理网络请求过程中可能出现的问题。 4. **异步支持**:可能提供了异步API调用的能力,使得开发者可以在不阻塞主线程的情况下获取数据。 在实际项目中,...

    Rest服务搭建范例

    Jersey是Java语言中最流行的RESTful服务框架之一,由Sun Microsystems(现已被Oracle收购)开发。它实现了JAX-RS(Java API for RESTful Web Services)规范,为创建REST服务提供了简洁的API。 在"RestDemo"项目中...

    WCF_REST实现

    本文将探讨如何在WCF中实现REST服务,重点介绍`UriTemplate`、`UriTemplateTable`和`WebHttpDispatchOperationSelector`这三个关键概念,并结合名为“JingyuanYu_ReservationService”和“JingyuanYu_...

    Django-REST-framework教程中文版

    本教程基于Django1.9以及restframework-v3.3.3版本,着重介绍了序列化、请求和响应处理、类视图、认证和权限、关联关系及超链接处理以及ViewSets和Routers的使用。 首先,在快速入门章节中,教程引导我们如何搭建一...

    ArcGIS+Server9.3+REST中文基础教程

    - **简单易用**:REST API通常使用HTTP标准方法(如GET、POST等),简化了客户端和服务端之间的交互。 - **轻量级**:无需复杂的协议栈,减少网络传输开销。 - **无状态**:每个请求都是独立的,不需要维护会话状态...

    REST的全部jia包

    在Java世界中,实现RESTful服务最常用的库是JAX-RS,它是Java EE的一部分,提供了一套API来创建RESTful服务。JAX-RS规范有多个实现,例如Jersey、Apache CXF和RESTEasy。这些实现库帮助开发者轻松地将Java类映射到...

    Python-Bookrest将restAPI添加到任意数据库的最简单方法

    - **数据库无关性**:`Bookrest`支持多种数据库,包括MySQL、PostgreSQL、SQLite等,只需简单的配置即可切换数据库。 - **模型定义**:通过Python类定义数据模型,映射到数据库表,简化了数据库操作。 - **自动路由...

    SpringMVC构建REST接口:第四篇 第一个REST风格的接口的源代码

    在实际项目中,可能还需要处理异常、添加权限控制、日志记录等其他功能。Spring MVC提供了丰富的注解和组件,使得构建REST接口变得非常方便和灵活。在"SpringMVC构建REST接口:第四篇 第一个REST风格的接口的源代码...

    致远OA开发REST远程接口实现发送表单

    1. **API配置**:首先,你需要在致远OA的后台管理系统中配置REST接口,设定接口的URL、请求方法(POST、GET等)、参数类型等信息。这一步骤确保了外部系统可以通过这些接口与OA系统进行通信。 2. **构建请求参数**...

    soap和rest比较

    与SOAP相比,REST则更强调轻量级、简单且易于扩展的特点,它不是一种具体的协议或标准,而是一种架构风格,其核心思想是通过URI来指定资源,并使用HTTP方法(GET、POST、PUT、DELETE等)来执行操作。REST的主要优势...

    rest 论文 英文原版

    REST架构风格强调无状态、客户端-服务器模型、缓存等原则,从而使得分布式系统更加简单、可扩展且易于维护。 #### 核心原则 - **无状态**:服务器不保存客户端会话状态,所有必要的状态都包含在请求中。 - **客户端...

    Putting_Java_to_REST.rar_java rest_rest

    在Java中,最常用的REST开发框架是JAX-RS(Java API for RESTful Web Services),它为创建RESTful服务提供了一套标准API。JAX-RS允许开发者使用注解来简化接口的定义,如`@Path`用于指定服务路径,`@GET`、`@POST`...

    rest webservice demo

    Java中实现REST服务最常用的框架是JAX-RS,它提供了一套标准API,使得开发者可以方便地创建RESTful接口。JAX-RS的实现有很多,比如 Jersey、RESTEasy 和 Apache CXF 等。在这个样例中,我们可能会使用其中的一个。 ...

    环信REST API 官方dome

    在Java开发环境中,Eclipse是最常用的一款集成开发环境,这里提供的示例是使用Eclipse导出,方便开发者导入自己的项目中直接运行和学习。 环信主要提供即时通讯(IM)服务,其REST API涵盖了用户管理、会话管理、...

    VC++ HTTP POST/GET/PUT/DELETE实现Rest API操作

    在RESTful架构中,POST、GET、PUT和DELETE是四个最基础的操作: 1. **POST**:用于创建新资源。在VC++中,你可以使用Winsock库或者CURL库来构建POST请求。你需要构造一个包含所有必要参数的数据包,并将其发送到...

    REST开发指南

    **Jersey 项目** 和 JAX-RS(Java API for RESTful Web Services)是 Java 社区中最受欢迎的 RESTful Web 服务开发框架之一。 - **JAX-RS 规范**:定义了如何使用 Java 类和注解来实现 RESTful 服务。它允许开发者...

    Building+a+REST+API+with+Spring

    文章涵盖了从项目初始化到REST API开发、安全配置、消息转换、错误处理等多个方面。 ### 1. Bootstrap a Web Application with Spring 4 #### 1.1 概览 在构建基于Spring的应用程序时,首先需要创建一个基本的Web...

Global site tag (gtag.js) - Google Analytics