【问题标题】:Spring MVC Param Error - How to send date request to jspSpring MVC 参数错误 - 如何向 jsp 发送日期请求
【发布时间】:2014-01-15 12:30:05
【问题描述】:

我正在使用 Spring MVC 3.4.0。 当我尝试 CRUD 示例时,我在浏览器控制台中收到此错误;

HTTP 状态 400 - 客户端发送的请求在语法上是 不正确。

我的代码:

EditBlog.jsp;

<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<%@ page contentType="text/html; charset=UTF-8" language="java"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%>

<form  action="/testhibernate/edit/${blogID}/" method="POST" name="BLOG">
    <h3>TITLE</h3>
    <input name="TITLE" type="text" value="${blogList.title}" size="30"/>
     <h3>CREATE_DATE</h3>
     <input name="CREATE_DATE" type="date" value="${blogList.createDate}" size="30"/>
     <h3>TEXT_CONTENT</h3>
     <input name="TEXT_CONTENT" type="text" value="${blogList.textContent}" size="30"/>
     <br>

    <input name="action" type="submit" value="Edit" size="30"/> 
</form> 

editController ;

package com.basari.testhibernate;

import java.util.Date;
import java.util.Locale;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
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.ModelAndView;

import com.basari.blog.Blog;
import com.basari.blog.User_Blog_App;

@Controller
public class editController {

    @Autowired
    private User_Blog_App deneme1;

    @RequestMapping(value = "/edit/{blogID}", method = RequestMethod.GET)
    public ModelAndView findBlog(@PathVariable Integer blogID)
     {
      ModelAndView mav = new ModelAndView("editBlog");
      Blog blog= deneme1.findBlog(blogID);
      mav.addObject("blogList", blog);
      return mav;
     }

     @RequestMapping(value = "/edit/{blogID}/", method = RequestMethod.POST)
     public ModelAndView editBlog(@PathVariable Integer blogID

                  , @RequestParam( value = "TITLE", required=false) String title
                  , @RequestParam( value = "TEXT_CONTENT", required=false) String content
                  , @RequestParam( value = "CREATE_DATE", required=false) Date date


     ) {
           Blog blog= deneme1.findBlog(blogID);


             blog.setTitle( title );
             blog.setTextContent( title );
             blog.setCreateDate(date);

             this.deneme1.editBlog( blog );

             ContactController.logger.debug( "contactPost action called ");

             try{


             }finally{

             }
             ModelAndView mav = new ModelAndView("editBlog");
             mav.addObject("blogList", blog);
             return mav;


     }

}

编辑函数 ;

public void editBlog(Blog blog){

    Session session =sessionFactory.openSession();
    Transaction tx= null;

    try{
        tx= session.beginTransaction();
        session.update(blog);
        tx.commit();
    }
    catch(HibernateException e){

        if (tx!=null) tx.rollback();
         e.printStackTrace(); 

    }finally{
        session.close();
    }       

}

我的 JAVA 控制台没有错误。怎么了?

【问题讨论】:

  • 当您在按钮submit 上或之前出现错误时?如果单击submit 后出现错误,那么记录是否在数据库中更新?并请从您收到错误的地址栏中发布 url
  • 您为CREATE_DATE 字段输入了什么值?
  • 当我点击按钮时,我在这个 url 得到这个错误:localhost:8080/testhibernate/edit/4
  • 我正在输入日期类型
  • 这没有帮助。您在&lt;input&gt; 字段中输入了什么值?如果有的话,请打开浏览器的网络控制台并检查 HTTP 请求中发送的内容。

标签: spring hibernate spring-mvc mapping crud


【解决方案1】:

试试这个它会为你工作 在你的控制器中

@InitBinder

protected void initBinder(WebDataBinder binder) {

    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat,false));

}

【讨论】:

    【解决方案2】:

    错误几乎可以肯定是 Spring 无法转换您在此 &lt;input&gt; 字段中输入的日期

     <input name="CREATE_DATE" type="date" value="${blogList.createDate}" size="30"/>
    

    放入要传递给的参数

     @RequestParam( value = "CREATE_DATE", required=false) Date date
    

    因此,该请求是一个错误请求,Spring 会返回一个 400 状态码。

    在您的请求参数中添加@DateTimeFormat 注释。例如,

     @RequestParam( value = "CREATE_DATE", required=false) @DateTimeFormat("dd-MM-yyyy") Date date
    

    然后确保您的客户发送适当格式的日期。例如

    14-01-2014
    

    【讨论】:

    • 我使用 datimeformat(patten="dd-mm-yyyy") 并且在网络控制台中看起来像这样 ------WebKitFormBoundaryXkUiV2UDcRBQvQZp Content-Disposition: form-data; name="CREATE_DATE" 2014-01-15 我在没有创建日期的情况下尝试了这个控制器,我又得到了这个错误
    • @hurricane 尝试将enctype="application/x-www-form-urlencoded" 添加到您的&lt;form&gt;。您正在发送一个多部分请求,我认为您的服务器未设置为正确处理。此外,如果您发送2014-01-15,则需要使用yyyy-MM-dd 的日期格式。
    • 现在我正在尝试 enctype="multipart/form-data" 形式。我想我必须在 bean 中配置这种形式。感谢这条路
    猜你喜欢
    • 2015-06-05
    • 2015-01-27
    • 2014-03-07
    • 2015-11-17
    • 1970-01-01
    • 2015-03-02
    • 2019-12-26
    • 2020-07-07
    • 1970-01-01
    相关资源
    最近更新 更多