提交表单时出现错误400请求错误
提交表单时出现错误400响应。我有一个工作正常的表格,之前我添加了一个下拉列表,它向用户显示性别的数据库。下拉菜单正确显示数据,但是当我提交表单时出现错误。这只发生在我添加下拉列表时。提交表单时出现错误400请求错误
RegistrationController.java: -
@Controller
public class RegistrationController {
final static Logger logger = Logger.getLogger(RegistrationController.class);
private StaffService staffService;
@Autowired
private GenderDao genderDao;
@Autowired
public RegistrationController(StaffService staffService) {
this.staffService = staffService;
}
@RequestMapping(method = RequestMethod.GET, value = "/register")
public String registerStaffPage(Model model) {
List<Gender> genders = genderDao.findAll();
Iterator<Gender> genderIterators = genders.iterator();
Map<Gender, String> genderMap = new LinkedHashMap<Gender, String>();
while (genderIterators.hasNext()) {
Gender gender = genderIterators.next();
genderMap.put(gender, gender.getGender());
}
model.addAttribute("gendersMap",genderMap);
model.addAttribute("staffRegistrationBean", new StaffRegistrationBean());
return "register";
}
@RequestMapping(method = RequestMethod.POST, value = "/registerStaff")
public String registerStaff(@ModelAttribute("staffRegistrationBean") StaffRegistrationBean staffRegistrationBean,
@Valid StaffRegistrationBean staffRegistrationBeans, Errors errors, Model model) {
// if (errors.hasErrors())
// return "register";
staffService.createStaff(staffRegistrationBean);
return "RegistrationDone";
}
@PostConstruct
public void init() {
logger.debug("RegistrationController Bean has been Initialized.");
}
@PreDestroy
public void destroy() {
logger.debug("RegistrationController Bean has been Destroyed.");
}
}
StaffRegistrationBean.java
public class StaffRegistrationBean {
private String userName;
private String password;
private String firstName;
private String lastName;
private String email;
private String Organization;
private String phoneNo;
private Gender gender;
// getter and setter follows
}
regsiter.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page isELIgnored="false"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Registration</title>
</head>
<body>
<h1>Registration Form</h1>
<form:form id="regForm" modelAttribute="staffRegistrationBean"
action="registerStaff" method="post">
<table>
<tr>
<td><form:label path="userName" cssErrorClass="error">
<spring:message code="userName" /> :
</form:label> <form:input path="userName" name="username" id="username"
cssErrorClass="error" /></td>
</tr>
<tr>
<td>Gender: <form:select path="gender">
<form:options items="${gendersMap}" />
</form:select>
</td>
</tr>
<tr>
<td><form:label path="organization" cssErrorClass="error">
<spring:message code="organizationName" /> :
</form:label> <form:input path="organization" name="username" id="organization"
cssErrorClass="error" /></td>
</tr>
<tr>
<td><form:label path="password" cssErrorClass="error">
<spring:message code="password" /> :
</form:label> <form:input path="password" name="password" id="password"
cssErrorClass="error" /></td>
</tr>
<tr>
<td><form:label path="firstName" cssErrorClass="error">
<spring:message code="firstName" /> :
</form:label> <form:input path="firstName" name="firstname" id="firstname"
cssErrorClass="error" /></td>
</tr>
<tr>
<td><form:label path="lastName" cssErrorClass="error">
<spring:message code="lastName" /> :
</form:label> <form:input path="lastName" name="lastname" id="lastname"
cssErrorClass="error" /></td>
</tr>
<%-- <tr>
<td><form:label path="gender">
<spring:message code="gender" /> : </form:label>
<td><form:select path="${gender}">
<form:options items="${genderList}" id="id" itemValue="gender">
</form:options>
</form:select></td>
</tr> --%>
<tr>
<td><form:label path="email" cssErrorClass="error">
<spring:message code="email" /> :
</form:label> <form:input path="email" name="email" id="email"
cssErrorClass="error" /></td>
</tr>
<tr>
<td><form:label path="phoneNo" cssErrorClass="error">
<spring:message code="phoneNo" /> :
</form:label> <form:input path="phoneNo" name="phoneNo" id="phoneNo"
cssErrorClass="error" /></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="register"></td>
</tr>
</table>
</form:form>
</body>
</html>
**
- 错误: -
**
HTTP状态400 - 错误的请求
类型状态报告
说明服务器无法或不愿处理由于某些被认为是客户端错误的请求(例如,格式错误的请求语法,无效请求消息成帧,或欺骗性请求路由)。
GenderMap是一个可以在屏幕上显示模型的地图。关键是性别类,价值是性别描述。用户将选择一个性别,该性别将引用性别表中的ID。
整个代码可在 - https://github.com/iftekharkhan09/ExpenseCalculator_Nex_Gen/tree/DevBranch
转至该网址 - 本地主机:8080/ExpenseCalculator /注册
任何帮助将得到高度赞赏。
当spring无法从HTML表单填充ModelAttribute时,会发生这种情况。
staffRegistrationBean的ModelAttribute可以不是HTML的性别属性转化为您的性别对象
正如Razmin说,春天正试图从POST请求(通过自动填充体填充您的ModelAttribute(它的类型是StaffRegistrationBean的) HTML表单)。
如果你看看POST请求主体,你会看到类似性别:1。 Spring无法将此Integer映射到性别(即使此Integer只是指您的性别ID)。 您将不得不从数据库中手动检索性别,并将其设置为您的模型。
我认为action =“registerStaff”不指向方法 –
@ Ali.Mojtehedy Nope。错误的URL返回404,但OP得到了400。 – BalusC
HTTP 400可能由于错误的请求有效内容对象而发生。在你的情况下,员工注册bean。在这个类中你定义了一个类型为Gender的变量性别,但我想在你的jsp中你只需提交一个String? – mrkernelpanic