Request processing failed; nested exception is java.lang.NullPointerException

后端 未结 2 1505
一个人的身影
一个人的身影 2021-01-16 17:38

i created a form and on post i want to save those values to the database and show the saved values on the page.
i am new to spring mvc and hence i am not understanding w

相关标签:
2条回答
  • 2021-01-16 18:14

    The attribute of your model has annotated with @ModelAttribute to be nulleable. This is so that when an exception occurs in times of bind there is something to return.

    Note the difference between the model attribute and the model attribute parameter.

    An exception during bind and validation times could be passing text in an integer field.

    Exception:

    org.springframework.web.util.NestedServletException: 
    Request processing failed; nested exception is java.lang.NullPointerException: 
    Parameter specified as non-null is null: method yourMethod, parameter yourParam
    

    In Kotlin

    Going from student: Student to student: Student? exception is avoided.

    @RequestMapping("/processFormRegister") 
    fun processFormRegister(
            @Valid @ModelAttribute("firstStudent") student: Student?,
            validationResult: BindingResult
    ): String {
        return if (validationResult.hasErrors()) {
            "StudentFormRegister"
        } else {
            "ResultFormRegister"
        }
    }
    

    And also to see the exception transformed into a validation you could use @Valid and Binding Result of Hibernate Validator obtaining:

    failed to convert value of type java.lang.string[] to required type java.lang.integer; nested exception is java.lang.numberformatexception: for input string: "a"
    

    GL

    0 讨论(0)
  • 2021-01-16 18:22

    Seems to be a problem in your form. At least, the inputs must be given the name attributes:

     <form method="post" action="<c:url value='/customer/'/>">
         Cust_Id :
         <input type="text" name="custid">
         <br>
    
         Name :
         <input type="text" name="name">
         <br>
    
         Age :
         <input type="text" name="age">
    
         <input type="submit" value="Save">
     </form>
    

    But since you are using Spring, it is preferable to use the Spring forms (and spring url's also):

    <spring:url var="customer" value="/customer"/>
    <form:form action="${customer}" method="post" modelAttribute="customer">
        <form:label path="custid">Id:</form:label>
        <form:input path="custId"/> <br>
    
        <form:label path="name">Name:</form:label>
        <form:input path="name"/> <br>
    
        <form:label path="age">Age:</form:label>
        <form:input path="age"/> <br>
    
        <input type="submit" value="Save"/>    
    </form:form>
    

    Edit And you should initialize dao!

    @Autowired
    private CustomerDao dao;
    
    0 讨论(0)
提交回复
热议问题