Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在没有if-else的情况下,如何处理springmvc项目中的错误?_Java_Rest_Spring Mvc_Exception - Fatal编程技术网

Java 在没有if-else的情况下,如何处理springmvc项目中的错误?

Java 在没有if-else的情况下,如何处理springmvc项目中的错误?,java,rest,spring-mvc,exception,Java,Rest,Spring Mvc,Exception,我不明白如何处理以下错误: 在类CustomerService中,我通过id删除客户,如果这样的id不存在,则必须抛出错误!如果没有ifelse构造,您怎么办 客户服务: //删除客户 公共客户(长id){ Customer=customerRepository.getByIdAndUserRole(id,“客户”); customerRepository.delete(客户); } 客户控制器: //删除映射 // //删除ID为的客户 @DeleteMapping(“/customers/

我不明白如何处理以下错误:

在类
CustomerService
中,我通过
id
删除客户,如果这样的
id
不存在,则必须抛出错误!如果没有
if
else
构造,您怎么办

客户服务

//删除客户
公共客户(长id){
Customer=customerRepository.getByIdAndUserRole(id,“客户”);
customerRepository.delete(客户);
}
客户控制器

//删除映射
//
//删除ID为的客户
@DeleteMapping(“/customers/{id}”)
void deleteCustomer(@PathVariable Long id){
customerService.deleteCustomer(id);
}
您可以尝试改用。这是一个
crudepository
deleteById
方法(希望您正在使用它),如果找不到客户,它会抛出
IllegalArgumentException

我假设“error”的意思是“exception”,然后在控制器中,可以用try-catch块包围,如下所示:

try{
    customerService.deleteCustomer(id);
} catch (IllegalArgumentException e) {
    log.error("No customer id exists!", e); 
    // if you have no logger, then use System.out.println() at least
}
如果您希望向调用者返回错误,则将数据类型从void更改为
HttpResponse
,当捕获异常时,您可以
返回HttpResponse(“没有具有该id的客户!”,HTTP.BAD_REQUEST)
。现在,调用方将收到一个400错误的请求

更好的方法是捕获服务本身中的异常,并向控制器返回布尔值(
true
如果客户被删除,如果客户无法删除/找不到,则返回
false

您可以尝试改用。这是一个
crudepository
deleteById
方法(希望您正在使用它),如果找不到客户,它会抛出
IllegalArgumentException

我假设“error”的意思是“exception”,然后在控制器中,可以用try-catch块包围,如下所示:

try{
    customerService.deleteCustomer(id);
} catch (IllegalArgumentException e) {
    log.error("No customer id exists!", e); 
    // if you have no logger, then use System.out.println() at least
}
如果您希望向调用者返回错误,则将数据类型从void更改为
HttpResponse
,当捕获异常时,您可以
返回HttpResponse(“没有具有该id的客户!”,HTTP.BAD_REQUEST)
。现在,调用方将收到一个400错误的请求


更好的方法是捕获服务本身中的异常,并向控制器返回一个布尔值(
true
如果客户被删除,
false
如果无法删除/找不到客户)。

如果要抛出错误,则必须检查一个条件,即将有一个if语句,但不一定需要另一个

例如,您可以根据下面的方法检查delete和throw error的响应

if (deleteCount == 0) {
  //throw error here
}
我希望这有助于您理解,程序无法知道何时抛出错误,何时不抛出错误,因此我们需要if-else让它知道在条件发生时如何操作


祝你好运,学习愉快

如果要抛出错误,则必须检查一个条件,即将有一个if语句,但不一定需要一个else语句

例如,您可以根据下面的方法检查delete和throw error的响应

if (deleteCount == 0) {
  //throw error here
}
我希望这有助于您理解,程序无法知道何时抛出错误,何时不抛出错误,因此我们需要if-else让它知道在条件发生时如何操作


祝你好运,学习愉快

尝试使用控制器建议。每当发生异常时,它将直接由处理程序处理。不需要if/else或try/catch块

1) 创建一个类CustomerControllerHandler,用@ControllerAdvice注释

2) 现在创建参数类型为Exception的方法

3) 这些方法将返回所需的JSON/POJO/void

4) 用@ExceptionHandler(Exception.class)和 @响应状态(HttpStatus.BAD_请求)


尝试使用控制器建议。每当发生异常时,它将直接由处理程序处理。不需要if/else或try/catch块

1) 创建一个类CustomerControllerHandler,用@ControllerAdvice注释

2) 现在创建参数类型为Exception的方法

3) 这些方法将返回所需的JSON/POJO/void

4) 用@ExceptionHandler(Exception.class)和 @响应状态(HttpStatus.BAD_请求)


这是一个糟糕的方法。值得检查id是否不为null以避免IllegalArgumentException,因此此处不建议使用try-catch块。这就是控制器中使用@NotNull的原因。这是一种糟糕的方法。值得检查id是否不为null以避免IllegalArgumentException,因此此处不建议使用try-catch块。这就是控制器中使用@NotNull的原因。