Return null 或 lambda 在转换方法 WebFlux 中可以为 null 的东西
Return null or something nullable from lambda in transformation mehtod WebFlux
在 Spring WebFlux 链中,我使用了一个映射操作,有时可能 return 为空,我收到警告:
Return null or something nullable from lambda in transformation mehtod
.
我相信当数据为空时,它实际上并没有将输入映射到 null
但它会引发异常。
处理这种情况的最佳方法是什么?
可以为 null 的 Map 方法:
public Pojo parseJson(String json) {
try {
// parse
return pojo;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
我的反应链:
public Mono<Pojo> query(long id) {
Integer value = idMapper.getValue(id);
if (value != null) {
return repo.query(value)
Parse Method
|
v
.map(this::parse);
}
return null;
}
在 functional/reactive 世界中工作时,您应该尽量避免所有 null 检查,并尽量从任何方法中都不 return null。
而不是 return Optional<T>
当存在空 return 的风险时, return Mono.error
当函数中存在错误时returns Mono
。或者 return Mono.empty
如果你只是想跳过 return 一些东西。
通过使用 optional,您可以将代码重写为更简洁的代码。
public Optional<Pojo> parseJson(String json) {
// Return an optional if there is risk for a null.
return Optional.ofNullable(new Pojo());
}
private final IdMapper idMapper = new IdMapper();
private final Repo repo = new Repo();
public Mono<Pojo> query(long id) {
// By returning an optional from the idMapper
// you can chain on and avoid null checks.
return idMapper.getValue(id).map(integer -> repo.query(integer)
.map(s -> parseJson(s).map(Mono::just)
.orElse(Mono.empty())))
.orElse(Mono.error(() -> new NotFoundException("No Pojo with ID could be found")));
}
class Pojo {
// Some pojo class
}
class Repo {
public Mono<String> query(long id) {
return Mono.just("Foo");
}
}
class IdMapper {
public Optional<Integer> getValue(long id) {
// Here return an Optional instead of null!
return Optional.of(1);
}
}
这里我 return 选项和 a 根据发生的情况做出 return 或 Mono.empty 或 Mono.error 的一些决定。
在 Spring WebFlux 链中,我使用了一个映射操作,有时可能 return 为空,我收到警告:
Return null or something nullable from lambda in transformation mehtod
.
我相信当数据为空时,它实际上并没有将输入映射到 null
但它会引发异常。
处理这种情况的最佳方法是什么?
可以为 null 的 Map 方法:
public Pojo parseJson(String json) {
try {
// parse
return pojo;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
我的反应链:
public Mono<Pojo> query(long id) {
Integer value = idMapper.getValue(id);
if (value != null) {
return repo.query(value)
Parse Method
|
v
.map(this::parse);
}
return null;
}
在 functional/reactive 世界中工作时,您应该尽量避免所有 null 检查,并尽量从任何方法中都不 return null。
而不是 return Optional<T>
当存在空 return 的风险时, return Mono.error
当函数中存在错误时returns Mono
。或者 return Mono.empty
如果你只是想跳过 return 一些东西。
通过使用 optional,您可以将代码重写为更简洁的代码。
public Optional<Pojo> parseJson(String json) {
// Return an optional if there is risk for a null.
return Optional.ofNullable(new Pojo());
}
private final IdMapper idMapper = new IdMapper();
private final Repo repo = new Repo();
public Mono<Pojo> query(long id) {
// By returning an optional from the idMapper
// you can chain on and avoid null checks.
return idMapper.getValue(id).map(integer -> repo.query(integer)
.map(s -> parseJson(s).map(Mono::just)
.orElse(Mono.empty())))
.orElse(Mono.error(() -> new NotFoundException("No Pojo with ID could be found")));
}
class Pojo {
// Some pojo class
}
class Repo {
public Mono<String> query(long id) {
return Mono.just("Foo");
}
}
class IdMapper {
public Optional<Integer> getValue(long id) {
// Here return an Optional instead of null!
return Optional.of(1);
}
}
这里我 return 选项和 a 根据发生的情况做出 return 或 Mono.empty 或 Mono.error 的一些决定。