【发布时间】: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