如何从 Spring Optional 返回特定字段而不是整个对象? [关闭]
Posted
技术标签:
【中文标题】如何从 Spring Optional 返回特定字段而不是整个对象? [关闭]【英文标题】:How to return the particular field from Spring Optional instead of the whole object? [closed] 【发布时间】:2020-11-29 23:31:21 【问题描述】:如何从 Optional 中返回特定字段而不是整个对象?
Optional<Scheme> scheme = schemeService.findBySerialNo(serialNo);
return scheme;
有结果:
"schemeId": 000001,
"personSN": "0000000001"
我想得到的只是personSN的值:“0000000001”。
【问题讨论】:
return scheme.map(Scheme::getPersonSN)
实际上不清楚您的预期输出。
@daniu: mapping Optional 不适用于 jdk_1.8.0_144。如果它在您的版本中也不可用,则使用 if (scheme.isPresent()) return scheme.get().getpersonSN(); else // 任何需要的内容检查 Optional 是否为空跨度>
@SahilGupta 不确定你的意思,Optional#map
is available in Java 8 since the start。它确实返回Optional<String>
。
使用Optional
的方法是将其用作monad。 (阅读什么是单子)。也请阅读Optional
javadocs,了解基础知识
【参考方案1】:
我看到一些关于在 Optional 类型上使用 get() 方法的奇怪 cmets。只是为了澄清 - 打开它不是一个好习惯! Tbh get() 应该被删除...如果你想对包装对象进行一些操作,请使用 ifPresent() 方法,如果你想对特定字段进行一些操作 - 使用 map()。阅读文档并始终尽量不要使用 get()。 此外,如果您想获取包装的对象,您应该知道使用 Optional 意味着在获取它时可能会出错,因此您可以在获取失败时抛出自定义异常
【讨论】:
【参考方案2】:我认为你有 2 个选项:
创建一个 DTO。
使用这个:
String personSN = schemeService.findBySerialNo(serialNo).get().getPersonSN() ;return personSN ;
【讨论】:
以上是关于如何从 Spring Optional 返回特定字段而不是整个对象? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
由modelmapper制作的Spring DTO返回所有内容为null
如何优雅处理多参数返回/无参数返回——std::optional