📅  最后修改于: 2020-11-11 05:35:14             🧑  作者: Mango
处理API中的异常和错误并向客户端发送正确的响应对于企业应用程序来说非常有用。在本章中,我们将学习如何在Spring Boot中处理异常。
在进行异常处理之前,让我们了解以下注释。
@ControllerAdvice是一个注释,用于全局处理异常。
@ExceptionHandler是用于处理特定异常并将自定义响应发送到客户端的注释。
您可以使用以下代码创建@ControllerAdvice类以全局处理异常-
package com.tutorialspoint.demo.exception;
import org.springframework.web.bind.annotation.ControllerAdvice;
@ControllerAdvice
public class ProductExceptionController {
}
定义一个扩展RuntimeException类的类。
package com.tutorialspoint.demo.exception;
public class ProductNotfoundException extends RuntimeException {
private static final long serialVersionUID = 1L;
}
您可以定义@ExceptionHandler方法来处理如图所示的异常。此方法应用于编写Controller Advice类文件。
@ExceptionHandler(value = ProductNotfoundException.class)
public ResponseEntity
现在,使用下面给出的代码从API引发异常。
@RequestMapping(value = "/products/{id}", method = RequestMethod.PUT)
public ResponseEntity
下面给出了处理异常的完整代码。在此示例中,我们使用了PUT API来更新产品。此处,在更新产品时,如果找不到产品,则返回响应错误消息为“找不到产品”。请注意, ProductNotFoundException异常类应扩展RuntimeException 。
package com.tutorialspoint.demo.exception;
public class ProductNotfoundException extends RuntimeException {
private static final long serialVersionUID = 1L;
}
下面给出了用于全局处理异常的Controller Advice类。我们可以在此类文件中定义任何异常处理程序方法。
package com.tutorialspoint.demo.exception;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
@ControllerAdvice
public class ProductExceptionController {
@ExceptionHandler(value = ProductNotfoundException.class)
public ResponseEntity
下面提供了产品服务API控制器文件来更新产品。如果未找到产品,则它将引发ProductNotFoundException类。
package com.tutorialspoint.demo.controller;
import java.util.HashMap;
import java.util.Map;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.tutorialspoint.demo.exception.ProductNotfoundException;
import com.tutorialspoint.demo.model.Product;
@RestController
public class ProductServiceController {
private static Map productRepo = new HashMap<>();
static {
Product honey = new Product();
honey.setId("1");
honey.setName("Honey");
productRepo.put(honey.getId(), honey);
Product almond = new Product();
almond.setId("2");
almond.setName("Almond");
productRepo.put(almond.getId(), almond);
}
@RequestMapping(value = "/products/{id}", method = RequestMethod.PUT)
public ResponseEntity
下面给出了主要的Spring Boot应用程序类文件的代码-
package com.tutorialspoint.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
产品的POJO类的代码如下-
package com.tutorialspoint.demo.model;
public class Product {
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Maven构建的代码– pom.xml如下所示-
4.0.0
com.tutorialspoint
demo
0.0.1-SNAPSHOT
jar
demo
Demo project for Spring Boot
org.springframework.boot
spring-boot-starter-parent
1.5.8.RELEASE
UTF-8
UTF-8
1.8
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-maven-plugin
下面给出了Gradle Build – build.gradle的代码-
buildscript {
ext {
springBootVersion = '1.5.8.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
group = 'com.tutorialspoint'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile('org.springframework.boot:spring-boot-starter-web')
testCompile('org.springframework.boot:spring-boot-starter-test')
}
您可以创建一个可执行的JAR文件,并使用Maven或Gradle命令运行Spring Boot应用程序-
对于Maven,您可以使用以下命令-
mvn clean install
在“ BUILD SUCCESS”之后,您可以在目标目录下找到JAR文件。
对于Gradle,您可以使用以下命令-
gradle clean build
在“ BUILD SUCCESSFUL”之后,您可以在build / libs目录下找到JAR文件。
您可以使用以下命令运行JAR文件-
java –jar
这将在Tomcat端口8080上启动应用程序,如下所示-
现在在POSTMAN应用程序中单击下面的URL,您可以看到如下所示的输出-
更新URL:http:// localhost:8080 / products / 3