Spring Mvc Form Post HTTP Status 400 Запрос, отправленный клиентом, был синтаксически неверным

1

Я пытаюсь добавить пользователей в базу данных mysql с формой, но я получаю:

HTTP Status 400 Запрос, отправленный клиентом, был синтаксически неправильным.

мои коды

User.java

public class User {

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }



    private int id;
    private String name;



}

UserDAO.java

public class UserDAO {


    public void insert(User u) throws SQLException, ClassNotFoundException {
        Connection conn=Database.newDatabase().getConnection();
        PreparedStatement ps=conn.prepareStatement("insert into user values (?)");
        ps.setString(1,u.getName());

        ps.execute();
        ps.close();
        conn.close();

    }
    public List<User> getUsers() throws SQLException, ClassNotFoundException {
        List<User> list=new ArrayList<User>();
        Connection conn=Database.newDatabase().getConnection();
        PreparedStatement ps=conn.prepareStatement("select *from user");
        ResultSet rs=ps.executeQuery();
        while (rs.next()){
            User u=new User();
            u.setId(rs.getInt("id"));
            u.setName(rs.getString("name"));

            list.add(u);
        }
        rs.close();
        ps.close();
        conn.close();
        return list;

    }
}

UserController.java

    package com.springapp.mvc.Controller;

import java.sql.SQLException;

import com.springapp.mvc.Model.User;
import com.springapp.mvc.Service.UserDAO;
import org.springframework.stereotype.Controller;
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.servlet.ModelAndView;


@Controller
public class UserController {

    @RequestMapping(value = "user",method = RequestMethod.GET)
    public ModelAndView getUser() throws ClassNotFoundException, SQLException {
        UserDAO udao=new UserDAO();
        ModelAndView mav=new ModelAndView();
        mav.setViewName("userControl");
        mav.addObject("userList",udao.getUsers());
        return mav;
    }


    @RequestMapping(value = "save", method = RequestMethod.POST)
    public String createUser(@ModelAttribute(value = "user") User u) throws SQLException, ClassNotFoundException {

        UserDAO udao=new UserDAO();
        udao.insert(u);

        return "redirect:user.html"  ;
    }
}

userControl.jsp

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"  %>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>

<html>
<head>
    <title>User</title>
</head>
<body>
<h1>
    Users

</h1>
<form:form action="save.html" method="post" commandName="user">
    <input type="hidden" name="id">
    <label for="name">User Name</label>
    <input type="text" id="name" name="name"/>
    <input type="submit" value="Submit"/>
</form:form>

<table border="1">
    <c:forEach var="user" items="${userList}">
        <tr>

            <td>${user.name}</td><td>${user.id}</td>
        </tr>
    </c:forEach>
</table>

</body>
</html>

web.xml

    <web-app version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">


    <display-name>Spring MVC Application</display-name>
    <servlet>
        <servlet-name>mvc-dispatcher</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>mvc-dispatcher</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value>
    </context-param>

    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>

    </listener>
    <welcome-file-list>
        <welcome-file>hello.jsp</welcome-file>
    </welcome-file-list>
</web-app>

MVC-диспетчерская-servlet.xml

    <beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <context:component-scan base-package="com.springapp.mvc.Controller,com.springapp.mvc.Service"/>

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

</beans>
Теги:
spring
spring-mvc

3 ответа

2

Я предполагаю, что проблема в вашем JSP в этой строке:

<input type="hidden" name="id">

Ваш id не имеет значения, поэтому при попытке конвертировать пустую строку в int будет NumberFormatException.

  • 0
    спасибо это сработало
0

+ Изменить

<form:form action="save.html" method="post" commandName="user">

использовать:

<form:form action="save" method="post" commandName="user">

Потому @RequestMapping значение @RequestMapping - это формат URL.

Внесите изменения в контроллер:

@RequestMapping(value = "save", method = RequestMethod.POST)
public String createUser(@ModelAttribute(value = "user") User u) throws SQLException, ClassNotFoundException {

    UserDAO udao=new UserDAO();
    udao.insert(u);

    return "redirect:user.html"  ;

Return View Имя только не расширение:

    return "redirect:user"  ;
0
@RequestMapping(value = "save", method = RequestMethod.POST)

Я думаю, что "save.html" следует изменить, чтобы просто "сохранить".

Ещё вопросы

Сообщество Overcoder
Наверх
Меню