2016-10-29 60 views
0

正在爲我的web服務編寫控制器,並在添加新方法時,舊方法開始拋出nullPointerException。我只是尋找一個答案或提示,可以指出這可能是錯誤的,只是發佈代碼和jsp並解釋發生了什麼。ModelAttribute對象上的NullPointerException

控制器的方法:

@RequestMapping(value={"/items"}, method = RequestMethod.GET) 
public String listItems(ModelMap model) { 
    model.addAttribute("item", new GenericItem()); 
    model.addAttribute("itemList", this.adminService.getAllGenericItems()); 
    model.addAttribute("itemTypes", ItemType.values()); 
    return "/admin/items"; 
} 


@RequestMapping(value={"/items", "/edit-item-{id}"}, method = RequestMethod.POST) 
public String addItem(@ModelAttribute("item") GenericItem item) { 
    if(item.getId() == 0) { // THIS LINE CAUSE NULL POINTER EXCEPTION 
     this.adminService.saveGenericItem(item); 
    } 
    else { 
     this.adminService.updateGenericItem(item); 
    } 
    return "redirect:/admin/items"; 
} 

JSP表單填充 「GenericItem」 對象:

<table> 
<c:if test="${!empty item.name}"> 
<form:hidden path="id" /> 
</c:if> 
<tr> 
    <td colspan = "2">Item details 
    </td> 
</tr> 
<tr> 
    <td>Name: 
    </td> 
    <td> 
     <form:input path="name" /> 
    </td> 
</tr> 
<tr> 
    <td>Weight: 
    </td> 
    <td> 
     <form:input path="weight" /> 
    </td> 
</tr> 
<tr> 
    <td>Value: 
    </td> 
    <td> 
     <form:input path="value" /> 
    </td> 
</tr> 
<tr> 
    <td>Item type: 
    </td> 
    <td> 
     <form:select path="itemType"> 
      <form:option value="">---</form:option> 
      <form:options items="${itemTypes}" /> 
     </form:select> 
    </td> 
</tr> 
<tr> 
    <td>Detail: 
    </td> 
    <td> 
     <form:input path="detail" /> 
    </td> 
</tr> 
<tr> 
    <td>Graphic: 
    </td> 
    <td> 
     <form:input path="graphic" /> 
    </td> 
</tr> 
<tr> 
    <td colspan="2"> 
     <c:if test="${!empty item.name}"> 
      <input type="submit" 
       value="Edit" /> 
     </c:if> 
     <c:if test="${empty item.name}"> 
      <input type="submit" 
       value="Add" /> 
     </c:if> 
    </td> 
</tr> 


GenericItem的POJO:

public class GenericItem { 

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
@Column(name = "generic_item_id") 
private Long id; 

@Column(name = "name") 
private String name; 

@Column(name = "weight") 
private int weight; 

@Column(name = "value") 
private int value; 

@Column(name = "item_type") 
@Enumerated(EnumType.STRING) 
private ItemType itemType; 

@Column(name = "detail") 
private String detail; 

@Column(name = "graphic") 
private String graphic; 

//getter setters 

}

所以我剛剛開始在控制器方法上獲取nullPointerExceptions,我想要讀取POSTed值ModelAttribute項目。奇怪的事情,它以前工作,現在停下來,我不知道從哪裏開始尋找我的錯誤。

如果這是任何幫助,這是完全錯誤

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException 
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982) 
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:648) 
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:316) 
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:126) 
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:90) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:114) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:122) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:168) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:48) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:205) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:120) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
org.springframework.security.web.csrf.CsrfFilter.doFilterInternal(CsrfFilter.java:120) 
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:64) 
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:91) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:53) 
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:213) 
org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:176) 
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) 
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262) 

根源

java.lang.NullPointerException 
eu.kerdev.webproject.controller.ApplicationController.addItem(ApplicationController.java:52) 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
java.lang.reflect.Method.invoke(Method.java:606) 
org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221) 
org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136) 
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:114) 
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) 
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) 
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) 
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963) 
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897) 
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) 
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:648) 
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:316) 
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:126) 
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:90) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:114) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:122) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:168) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:48) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:205) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:120) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
org.springframework.security.web.csrf.CsrfFilter.doFilterInternal(CsrfFilter.java:120) 
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:64) 
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:91) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:53) 
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:213) 
org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:176) 
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) 
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262) 

回答

1

你的項目的ID等於空,因此:

item.getId() == 0

將拋出空指針異常。用途:

Long.valueOf(0L).equals(item.getId())

或設置一些價值你的ID。

+0

非常感謝...完全忘記了我重構了所有我的id從Long到Long。 – Kerath100

相關問題