我正在编写spring boot rest api以通过id从弹性搜索中获取记录。虽然我从弹性搜索中得到的回复很少keys
有null
个对象。
那么,在设置Product
(POJO类)的值时,如何进行空检查。
使用以下代码行处理此异常,但错误仍然存在product.setExpiration_date(sourceAsMap.get("expiration_date").toString() != null ? sourceAsMap.get("expiration_date").toString() : "");
。
我不确定我的方法是否正确。
请在下面找到完整的代码。
SearchResponse searchResponse = null;
try {
searchResponse = restHighLevelClient.search(searchRequest);
} catch (IOException e) {
e.getLocalizedMessage();
}
// read the response
String productName = null;
Product product = null;
SearchHit[] searchHits = searchResponse.getHits().getHits();
for (SearchHit hit : searchHits) {
// get each hit as a Map
Map<String, Object> sourceAsMap = hit.getSourceAsMap();
product=new Product();
product.setName(sourceAsMap.get("name").toString());
product.setCatalog_id(sourceAsMap.get("catalog_id").toString());
product.setCode(sourceAsMap.get("code").toString());
product.setExpiration_date(sourceAsMap.get("expiration_date").toString() != null ?
sourceAsMap.get("expiration_date").toString() : ""); // Error throwing in this line.
product.setIs_visible(sourceAsMap.get("is_visible").toString());
}
请在下面找到我的错误:
2018-05-23 22:59:13.216 ERROR 9948 --- [nio-8594-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause
java.lang.NullPointerException: null
at com.sun.searchengine.dao.ProductDao.getProductById(ProductDao.java:105) ~[classes/:na]
at com.sun.searchengine.controller.ProductController.getProductById(ProductController.java:24) ~[classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_131]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_131]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_131]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_131]
答案 0 :(得分:1)
当你检查null元素时,不需要调用它们的方法。
sourceAsMap.get("expiration_date").toString() != null ?
sourceAsMap.get("expiration_date").toString() : ""
变为
sourceAsMap.get("expiration_date") != null ?
sourceAsMap.get("expiration_date").toString() : ""
否则,您将调用null
上的字符串