如何从 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#mapis available in Java 8 since the start。它确实返回Optional&lt;String&gt; 使用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 返回特定字段而不是整个对象? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Optional与Mybatis

由modelmapper制作的Spring DTO返回所有内容为null

用optional取代null

如何优雅处理多参数返回/无参数返回——std::optional

如果嵌套的 Optional 为空,则返回另一个 Optional

如何仅返回 Spring Data MongoDB 中查询的特定字段?