java - 处理空指针异常不起作用

标签 java rest spring-boot elasticsearch

我正在编写 Spring Boot Rest api 以通过 id 从 Elasticsearch 中获取记录。虽然我从 Elasticsearch 中得到了很少的响应keysnull目的。 那么,我如何在设置 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]

最佳答案

当您检查 null 元素时,不需要对其调用方法。

sourceAsMap.get("expiration_date").toString() != null ? 
                sourceAsMap.get("expiration_date").toString() : ""

变成了

sourceAsMap.get("expiration_date") != null ? 
                sourceAsMap.get("expiration_date").toString() : ""

否则您将调用 null 的字符串

关于java - 处理空指针异常不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50500400/

相关文章:

java - 从 Controller 中的最后一次插入中获取生成的 Id,Spring

java - Hibernate 通过natural-id 查询子类型实体

java - NoClassDefFoundError 尽管有 OSGi 包

java - 我有一个 Java 异常 : java. lang.NumberFormatException

java:创建一个方法来操作两个对象(初学者)

jquery - 跨域 jQuery Ajax 请求和 WCF REST 服务

java - 如何使用java发送请求的多个响应

php - Rest API 404 页面未找到

java - Android 上的 HTTP 基本授权网络问题

spring - 选择组件加载顺序