Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.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 如何处理lambda表达式中的异常_Java_Lambda_Optional - Fatal编程技术网

Java 如何处理lambda表达式中的异常

Java 如何处理lambda表达式中的异常,java,lambda,optional,Java,Lambda,Optional,我已经找到了MyService#create,它抛出了CustomException。我在可选映射中调用此方法,如下所示: return Optional.ofNullable(obj) .map(optObj -> { try { return myService.create(optObj); } catch (CustomException e) { ret

我已经找到了MyService#create,它抛出了CustomException。我在可选映射中调用此方法,如下所示:

return Optional.ofNullable(obj)
        .map(optObj -> {
            try {
                return myService.create(optObj);
            } catch (CustomException e) {
                return new ResponseEntity<>(e.getMessage(), HttpStatus.BAD_REQUEST);
            }
        })
        .map(created -> new ResponseEntity<>("Operation successful", HttpStatus.CREATED))
        .orElse(new ResponseEntity<>("Operation failed", HttpStatus.BAD_REQUEST));
return可选。不可用(obj)
.map(optObj->{
试一试{
返回myService.create(optObj);
}捕获(自定义异常){
返回新的ResponseEntity(例如getMessage(),HttpStatus.BAD_请求);
}
})
.map(已创建->新响应属性(“操作成功”,HttpStatus.created))
.orElse(新响应属性(“操作失败”,HttpStatus.BAD_请求));

当我用引起异常的参数调用这个方法时,CustomException被捕获,但结果是操作成功,状态为200。如何在lambda中处理此异常并从异常返回消息?

您可以捕获异常并返回
新的响应属性(例如getMessage(),HttpStatus.BAD_请求)

然后将其映射到
新响应属性(“操作成功”,HttpStatus.CREATED)

如果您想拥有
新的响应属性(“操作成功”,HttpStatus.CREATED)
仅当调用成功时,将代码重写为:

return Optional.ofNullable(obj)
        .map(optObj -> {
            try {
                myService.create(optObj);
                return new ResponseEntity<>("Operation successful", HttpStatus.CREATED);
            } catch (CustomException e) {
                return new ResponseEntity<>(e.getMessage(), HttpStatus.BAD_REQUEST);
            }
        })
        .orElse(new ResponseEntity<>("Operation failed", HttpStatus.BAD_REQUEST));
return可选。不可用(obj)
.map(optObj->{
试一试{
myService.create(optObj);
返回新的响应状态(“操作成功”,HttpStatus.CREATED);
}捕获(自定义异常){
返回新的ResponseEntity(例如getMessage(),HttpStatus.BAD_请求);
}
})
.orElse(新响应属性(“操作失败”,HttpStatus.BAD_请求));

您可以捕获异常并返回
新的响应属性(例如getMessage(),HttpStatus.BAD_请求)

然后将其映射到
新响应属性(“操作成功”,HttpStatus.CREATED)

如果您想拥有
新的响应属性(“操作成功”,HttpStatus.CREATED)
仅当调用成功时,将代码重写为:

return Optional.ofNullable(obj)
        .map(optObj -> {
            try {
                myService.create(optObj);
                return new ResponseEntity<>("Operation successful", HttpStatus.CREATED);
            } catch (CustomException e) {
                return new ResponseEntity<>(e.getMessage(), HttpStatus.BAD_REQUEST);
            }
        })
        .orElse(new ResponseEntity<>("Operation failed", HttpStatus.BAD_REQUEST));
return可选。不可用(obj)
.map(optObj->{
试一试{
myService.create(optObj);
返回新的响应状态(“操作成功”,HttpStatus.CREATED);
}捕获(自定义异常){
返回新的ResponseEntity(例如getMessage(),HttpStatus.BAD_请求);
}
})
.orElse(新响应属性(“操作失败”,HttpStatus.BAD_请求));

否,lambda中存在抛出异常。我想捕获并返回正确的结果使用
可选
的原因是什么?在这里,一个简单的
if-then-else
就足够了,可以与
try-catch
一起使用。尝试使用负责处理异常的包装器方法否,lambda中有抛出异常。我想捕获并返回正确的结果使用
可选
的原因是什么?在这里,一个简单的
if-then-else
就足够了,可能还需要一个
try-catch
。尝试使用负责处理异常的包装器方法