异常信息
[DEBUG] 2024-04-16 10:01:29,240 org.springframework.web.servlet.DispatcherServlet - GET "/smbmsForKD50_war_exploded/provider/delete?proid=18", parameters={masked}
[DEBUG] 2024-04-16 10:01:29,241 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped to public java.util.Map<java.lang.String, java.lang.String> cn.smbms.controller.provider.ProviderController.deleteProvider(java.lang.String)
[DEBUG] 2024-04-16 10:01:29,253 org.springframework.web.servlet.DispatcherServlet - Failed to complete request: java.lang.RuntimeException: java.lang.NullPointerException
[DEBUG] 2024-04-16 10:01:30,490 org.springframework.web.servlet.DispatcherServlet - GET "/smbmsForKD50_war_exploded/provider/delete?proid=18", parameters={masked}
[DEBUG] 2024-04-16 10:01:30,490 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped to public java.util.Map<java.lang.String, java.lang.String> cn.smbms.controller.provider.ProviderController.deleteProvider(java.lang.String)
[DEBUG] 2024-04-16 10:01:30,490 org.springframework.web.servlet.DispatcherServlet - Failed to complete request: java.lang.RuntimeException: java.lang.NullPointerException
原始代码:
@RequestMapping("delete")
@ResponseBody
public Map<String, String> deleteProvider(@RequestParam("proid") String proId) {
Map<String, String> resultMap = new HashMap<>();
if (!StringUtils.isNullOrEmpty(proId)) {
ProviderService providerService = new ProviderServiceImpl();
int flag = providerService.deleteProviderById(proId);
if (flag == 0) {
resultMap.put("delResult", "true");
} else if (flag == -1) {
resultMap.put("delResult", "false");
} else if (flag > 0) {
resultMap.put("delResult", String.valueOf(flag));
}
} else {
resultMap.put("delResult", "notexist");
}
return resultMap;
}
异常原因
如果使用了@Resource注解,就不需要在方法内部手动创建ProvideService对象了,因为Spring会进行自动注入。
所以,可以将ProviderService providerService = new ProviderServiceImpl();这行代码删除掉,因为使用了@Resource注解后,Spring会负责为我们初始化providerService对象。这样就避免了因为手动创建对象二可能导致的空指针异常。
修改后代码:
@RequestMapping("delete")
@ResponseBody
public Map<String, String> deleteProvider(@RequestParam("proid") String proId) {
Map<String, String> resultMap = new HashMap<>();
if (!StringUtils.isNullOrEmpty(proId)) {
int flag = providerService.deleteProviderById(proId);
if (flag == 0) {
resultMap.put("delResult", "true");
} else if (flag == -1) {
resultMap.put("delResult", "false");
} else if (flag > 0) {
resultMap.put("delResult", String.valueOf(flag));
}
} else {
resultMap.put("delResult", "notexist");
}
return resultMap;
}