【问题标题】:Delete method gives Null Pointer Exception删除方法给出空指针异常
【发布时间】:2020-09-15 09:38:00
【问题描述】:

我已经从 reactjs 向 spring boot 应用发出了一个简单的请求,然后出现了以下错误。

java.lang.NullPointerException: null

产品在 reactjs 中不为空,但我认为问题出在调用部分

弹簧靴

CrosConfig 类

@Configuration
public class CrosConfig  {

    @Bean
    public WebMvcConfigurer crosConfigurer() {

        return new WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**").allowedMethods("DELETE");
            }
        };
    }
}

控制器类

@CrossOrigin(origins = "*", maxAge = 3600)
@RestController
@RequestMapping("/products")
public class ProductController {


private ProductService productService;

@Autowired
private ProductController(ProductService productService) {
    this.productService = productService;
}

  @DeleteMapping(value = "/delete", consumes = {MediaType.APPLICATION_JSON_VALUE})
    public void deleteProduct(@RequestBody Product product) throws Exception {
        
        if (product.getProductId() != 0 && !product.getProductName().trim().isEmpty() &&
                product.getNumberOfUnitInCartoon() != 0 && product.getPriceOfCartoon() != 0.0)
            productService.deleteProduct(product);
        else
            throw new NullPointerException();
    }

}

reactjs

deleteProduct=(product)=>{

        console.log(`${product.productId}`)
        console.log(`${product.productName}`)


        fetch('http://localhost:9090/products/delete',{
            method:'DELETE',
            headers:{
                'content-type':'application/json'
            },
            body:JSON.stringify({
                 product:product
            })
        })
            .then(()=>{
                this.setState({
                     isLoaded:true
                })
            },error=>{
                this.setState({
                    isLoaded:true,
                    error
                })
            });
        this.getAllProducts();
    }

堆栈跟踪

2020-09-15 14:44:33.265 ERROR 2396 --- [nio-9090-exec-7] 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.benz.assignment.web.controller.ProductController.deleteProduct(ProductController.java:54) ~[classes/:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:an]............

【问题讨论】:

  • 您的控制台中是否有堆栈跟踪(我的意思是,您实际执行 Spring Boot 应用程序的控制台)?此外,您的代码 sn-ps 没有显示控制器的 productService 字段是如何定义的。一个建议:不要在 else 语句中抛出 NullPointerException,而是使用更具体的异常类型,例如 IllegalArgumentException
  • 我会更新堆栈跟踪
  • 由于您的 sn-p 中没有对行进行编号,请您指出您的控制器的第 54 行吗?
  • 第 54 行 ---> 抛出新的 NullPointerException();
  • 好吧,NullPointerException 是由您的代码抛出的,即在您的 else 情况下的 throw 语句。该语句未执行,因为product 为空,这是因为您编写的条件。那么......你的问题到底是什么?

标签: json reactjs ajax spring spring-boot


【解决方案1】:

您提供的堆栈跟踪显示 NullPointerException 实际上是由您自己的代码抛出的(在您的 else 语句中)。所以你的控制器方法的product 参数是not null 但你的if 条件评估为false。所以这里没有错。

【讨论】:

    【解决方案2】:

    感谢 Michal Zoiber 和其他人,问题出在请求正文中。以下方式给出了解决方案

    fetch('http://localhost:9090/products/delete',{
                method:'DELETE',
                headers:{
                    'content-type':'application/json'
                },
                body:JSON.stringify(product)
            })
                .then(()=>{
                    this.setState({
                         isLoaded:true
                    },()=>{
                        this.getAllProducts();
                    })
                },error=>{
                    this.setState({
                        isLoaded:true,
                        error
                    })
                });
        } 
    

    【讨论】:

      猜你喜欢
      • 2011-06-03
      • 2012-02-25
      • 2014-09-06
      • 2014-07-19
      • 2017-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多