英文:
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<Scheme> scheme = schemeService.findBySerialNo(serialNo);
return scheme;
There is the result:
{
"schemeId": 000001,
"personSN": "0000000001"
}
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
我认为你有两个选择:
-
创建一个DTO。
-
使用以下方式:
String personSN = schemeService.findBySerialNo(serialNo).get().getPersonSN(); return personSN;
英文:
i think u have 2options :
-
create a DTO.
-
using this :
String personSN = schemeService.findBySerialNo(serialNo).get().getPersonSN() ;return personSN ;
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论