简体   繁体   中英

Spring MVC HTTP Status 400

I have developed a student management web application to add , edit and delete student using spring MVC, Hibernate and MYSQL databas.

Add and edit options are correctly working but when clicking on delete it shows HTTP status 400.

The delete function in controller is same like edit only difference is in url and it is calling delete function in hibernate.

Controller

package com.akhil.controller;

import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.mvc.annotation.ModelAndViewResolver;

import com.akhil.model.Student;
import com.akhil.service.StudentService;

@Controller
public class StudentController {
@Autowired
private StudentService studentService;

@RequestMapping("/")
public String setupForm(ModelMap model){
    Student student = new Student();
    model.addAttribute("student", student);
    model.addAttribute("studentList", studentService.getAllStudent());
    return "student";
}
@RequestMapping(value="/student.do", method=RequestMethod.POST)
public String doActions(@ModelAttribute Student student, BindingResult result, @RequestParam String action, Map<String, Object> map){
    Student studentResult = new Student();
    studentService.add(student);
    map.put("student", studentResult);
    map.put("studentList", studentService.getAllStudent());
    return "student";
}
@RequestMapping(value="/editstudent", method=RequestMethod.GET)
public String editstudent(@RequestParam("studentId") int studentID, Model model) {

    Student student = studentService.getStudent(studentID);
    model.addAttribute(student);
    return "student1";
    }
@RequestMapping(value="/updatestudent.do", method=RequestMethod.POST)
public String updatestudent(@ModelAttribute Student student, BindingResult result, @RequestParam String action, Map<String, Object> map){
    Student studentResult = new Student();
    studentService.edit(student);
    //map.put("student", studentResult);
    map.put("studentList", studentService.getAllStudent());
    return "student";
}
@RequestMapping(value="/deletestudent", method=RequestMethod.GET)
public String deletestudent(@RequestParam("studentId") int studentID, Model model) {
    Student studentResult = new Student();
    studentService.delete(studentID);
    model.addAttribute("student", studentResult);
    model.addAttribute("studentList", studentService.getAllStudent());
    return "student";
    }

}

View

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ include file="/WEB-INF/jsp/includes.jsp"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"   "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Student Management</title>
</head>
<body>
<h1>Students Data</h1>
<form:form action="student.do" method="POST" commandName="student">
<table>
    <tr>
        <td><form:label path="studentId">Student ID:</form:label></td>
        <td><form:input path="studentId" value="${Student.studentID}" />   </td>
    </tr>
    <tr>
        <td>First name</td>
        <td><form:input path="firstname" value="${Student.firstname}"/></td>
    </tr>
    <tr>
        <td>Last name</td>
        <td><form:input path="lastname" value="${Student.lastname}" /></td>
    </tr>
    <tr>
        <td>Year Level</td>
        <td><form:input path="yearLevel" value="${Student.yearLevel}" />  </td>
    </tr>
    <tr>
        <td colspan="2">
            <input type="submit" name="action" value="Add" />
            <input type="submit" name="action" value="Edit" />
            <input type="submit" name="action" value="Delete" />
            <input type="submit" name="action" value="Search" />
        </td>
    </tr>
</table>
</form:form>
<br>
<table border="1">
<tr>
<th>ID</th>
<th>First name</th>
<th>Last name</th>
<th>Year level</th>
</tr>
<c:forEach items="${studentList}" var="student">
    <tr>
        <td>${student.studentId}</td>
        <td>${student.firstname}</td>
        <td>${student.lastname}</td>
        <td>${student.yearLevel}</td>
        <td align="center"><a href="editstudent.html? studentId=${student.studentId}">Edit</a> | <a href="deletestudent.html?studentIds=${student.studentId}">Delete</a></td>
    </tr>
</c:forEach>
</table>
</body>
</html>

The 'delete' link sends a parameter with a wrong name ('studentIdsssss' rather than 'studentId'). This yields an error because @RequestParam is 'required=true' by default.

BTW, please note it's more customary to expose 'side effect' actions (eg edit, delete) as POST. But that's besides the point, and it's probably ok if it's just for a simple demo.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM