简体   繁体   English

Spring MVC HTTP Status 400

[英]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. 我开发了一个学生管理Web应用程序,使用spring MVC,Hibernate和MYSQL数据库添加,编辑和删除学生。

Add and edit options are correctly working but when clicking on delete it shows HTTP status 400. 添加和编辑选项正常工作,但单击删除时,它显示HTTP状态400。

The delete function in controller is same like edit only difference is in url and it is calling delete function in hibernate. 控制器中的删除功能与编辑相同,只是在url中,而在hibernate中调用delete功能。

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'). 'delete'链接发送一个名称错误的参数('studentIdsssss'而不是'studentId')。 This yields an error because @RequestParam is 'required=true' by default. 这会产生错误,因为@RequestParam默认为'required = true'。

BTW, please note it's more customary to expose 'side effect' actions (eg edit, delete) as POST. 顺便说一句,请注意,将“副作用”操作(例如编辑,删除)公开为POST更为习惯。 But that's besides the point, and it's probably ok if it's just for a simple demo. 但除此之外,如果只是一个简单的演示,它可能还可以。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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