Статус HTTP 400 — обязательный целочисленный параметр «id» отсутствует

У меня проблема, когда я создаю проект Spring + Spring MVC + Hibernate + MySQL.

Все работает нормально, но когда я получаю «editpage», а затем хочу опубликовать информацию о редактировании в MySQL, я получаю следующую ошибку от моего Tomcat:

HTTP Status 400 - Required Integer parameter 'id' is not present

Класс контроллера

@RequestMapping(value = "/users/edit", method = RequestMethod.POST)
public String saveEdit(@ModelAttribute("userAttribute") User user,
                       @RequestParam(value = "id", required =   
true)Integer id, Model model){

    logger.debug("Received request to update person");

    user.setId(id);

    personService.edit(user);

    model.addAttribute("id", id);

    return "editedpage";
}

Класс обслуживания

public void edit(User user){

    logger.debug("Editing existing user");

    Session session = sessionFactory.getCurrentSession();

    User existingUser = (User) session.get(User.class, user.getId());

    existingUser.setLogin(user.getLogin());
    existingUser.setPassword(user.getPassword());
    existingUser.setReal_name(user.getReal_name());

    session.save(existingUser);
}

Моя JSP-страница

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
     pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="en">

<head>
<!-- Bootstrap core CSS -->
<link href="<c:url value="/resources/styles/bootstrap.min.css" />"        
rel="stylesheet">
<script src="<c:url value="../../resources/javascripts  
/non-empty_validation_editpage.js"/>"></script>

<title>Editing page</title>

</head>

<body>

<h1 style="text-align: center">Edit page</h1>

<c:url var="saveUrl" value="/main/users/edit?id = ${userAttribute.id}"/>
<form:form modelAttribute = "userAttribute" method = "POST" action =  
"${saveUrl}">

<div style="width: 300px; height: 500px; margin: auto;">

<div class="form-group" >
<form:label path = "id">id:</form:label>
<form:input type = "id" name = "id" path = "id" disabled="true"  
class="form-control" />

</div>

<div class="form-group">
  <form:label path = "login">Login</form:label>
  <form:input type = "login" name = "login" path = "login" class="form- 
control"  placeholder="new login"/>

</div>

<div class="form-group">
<form:label path = "password">Password</form:label>
<form:input type = "password" name = "password" path = "password" 
class="form-control"  placeholder="new password"/>

</div>

<div class="form-group">
<form:label path = "real_name">Real name</form:label>
<form:input type = "real_name" name = "real_name" path = "real_name" 
class = "form-control"  placeholder = "new Real name"/>

</div>

<input type="submit" class="btn btn-success" value="Save"  style="width:  
300px"/>

</div>

</form:form>

</body>
</html>

person O.Kuz    schedule 30.08.2015    source источник
comment
Трудно сказать, может быть, пробелы вокруг = означают здесь: edit?id = ${userAttribute.id}?   -  person MirMasej    schedule 30.08.2015
comment
спасибо, вы решили мою проблему!   -  person O.Kuz    schedule 30.08.2015


Ответы (2)


Обычно это происходит, когда информация, которая требуется в вашем методе

@RequestParam (значение = «id», обязательное = true) Целочисленный идентификатор

в этом случае идентификатор не присутствует в качестве параметра запроса всякий раз, когда вы публикуете сохраненные данные. Попытка жестко закодировать любое число вместо @RequestParam(value = "id", required =
true)Integer id, вы сможете сохранить данные. Другой способ - изменить с required = true на false только для целей тестирования и посмотреть, имеет ли это какое-то значение.

person user3509208    schedule 30.08.2015
comment
проблема была решена с удалением пробелов вокруг знака = здесь: edit?id = ${userAttribute.id}?. Спасибо - person O.Kuz; 30.08.2015

Если вы запрашиваете доступ к методу Get, URL-адрес должен содержать параметр id. Если POST, вы можете жестко кодировать @RequestParam(value = "id", required =false)

person zehao chen    schedule 15.11.2018