如何从Spring的Optional中返回特定字段而不是整个对象?

huangapple go评论82阅读模式
英文:

How to return the particular field from Spring Optional instead of the whole object?

问题

如何从Optional中返回特定字段而不是整个对象?

Optional<Scheme> scheme = schemeService.findBySerialNo(serialNo);
return scheme.map(Scheme::getPersonSN).orElse(null);

这是结果:

{
    "schemeId": 000001,
    "personSN": "0000000001"
}

我想要获取的只是personSN字段的值:"0000000001"。

英文:

How to return the particular field from Optional instead of the whole object?

Optional&lt;Scheme&gt; scheme = schemeService.findBySerialNo(serialNo);
return scheme;

There is the result:

{
    &quot;schemeId&quot;: 000001,
    &quot;personSN&quot;: &quot;0000000001&quot;
}

What I want to get is the value of personSN only: "0000000001".

答案1

得分: 2

我看到一些关于在Optional类型上使用get()方法的奇怪评论。只是为了澄清一下 - 解包它不是一个好的做法!说实话,应该移除get()...如果你想对包装的对象进行一些操作,使用ifPresent()方法,如果你想对特定字段进行一些操作,使用map()。阅读文档并始终尽量不要使用get()。
另外,如果你想获取包装的对象,你应该意识到使用Optional意味着在获取时可能会出现问题,所以你可以抛出自定义异常作为获取失败的结果。

英文:

I see some weird comments about using get() method on Optional type. Just to clarify - it is not a good practice to unwrap it! Tbh get() should be removed... If you want to do some operations on wrapped object use ifPresent() method, if u want to do some operations on particular field - use map(). Read the documentation and always try NOT TO use get().
Also if u want to fetch the wrapped object, you should be aware that using Optional means that something might go wrong while fetching it so you can throw custom exception as a result of failed fetching

答案2

得分: 1

我认为你有两个选择:

  1. 创建一个DTO。

  2. 使用以下方式:

    String personSN = schemeService.findBySerialNo(serialNo).get().getPersonSN(); return personSN;

英文:

i think u have 2options :

  1. create a DTO.

  2. using this :

    String personSN = schemeService.findBySerialNo(serialNo).get().getPersonSN() ;return personSN ;

huangapple
  • 本文由 发表于 2020年8月10日 18:59:57
  • 转载请务必保留本文链接:https://go.coder-hub.com/63338877.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定