Java 如何处理lambda表达式中的异常
我已经找到了MyService#create,它抛出了CustomException。我在可选映射中调用此方法,如下所示: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
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
。尝试使用负责处理异常的包装器方法