【问题标题】:Spring 4.X: Cannot map request bean to POJO in ControllerSpring 4.X:无法将请求 bean 映射到控制器中的 POJO
【发布时间】:2014-02-21 08:20:21
【问题描述】:

编辑:也许我需要更清楚地了解这个应用程序是如何工作的。我这里没有表格。我使用 HTML 导航 API 捕获页面响应和加载时间,然后向我的应用程序发送一个“GET”请求,如下所示:

window.onload=function(){
    setTimeout(function(){
        var page = window.location.pathname;
        var xmlhttp = new XMLHttpRequest();
        var pt = performance.timing;

                ...SNIP....
        var load  = pt.loadEventEnd - pt.loadEventStart;
        var redc = window.performance.navigation.redirectCount;

        xmlhttp.open("GET", "http://localhost:8080/wp/timing?app=test&page="+page
                      +"&str="+str
                      +"&tot="+tot
                      +"&red="+red
                      +"&cache="+cache
                      +"&dns="+dns
                      +"&conn="+conn
                      +"&req="+req
                      +"&res="+res
                      +"&dom="+dom
                      +"&load="+load
                      +"&redc="+redc
                      , true);
        xmlhttp.send(null);
    }, 0);
};

这就是我的控制器(如下所示)出现的地方。现在,这里的请求参数之一是以毫秒为单位的时间。 Spring 自动将与请求参数同名的原始数据类型映射到 bean 中的适当字段。但是,当我使用“日期”时,这会失败。

================================================ =========================================

我正在开发这个应用程序,我在控制器中接收一定数量的请求参数,在控制器内部,我传入一个自定义 bean 作为参数。现在,我能够成功地将应用程序的请求参数(与 bean 中的名称相同)映射到 POJO。 但是,现在我在我的 bean 中添加了一个 Date 类型,并且我希望将适当的请求参数自动转换为“Date”。但是,当我在 POJO 中添加日期字段时,不会调用控制器。

这是我的代码中的一个 sn-p:

控制器:

@Controller
public class Timing {

    @Autowired
    private PageService pageService;

    @RequestMapping(value="/timing", method = RequestMethod.GET)
    @ResponseBody
    public void insert(Page page) throws UnknownHostException {
        page.setTs(new Date());
        pageService.updatePage(page);
    }

我也尝试过添加自定义编辑器:

@InitBinder
     public void initBinder(WebDataBinder binder,HttpServletRequest request) {
                     SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yy");
                     dateFormat.setLenient(false);
                     binder.registerCustomEditor(Date.class, new CustomDateEditor(
                                                     dateFormat, true));
     }

这是我的豆子:

@Document
public class Page {

    @Id
    private String id;
    private Date ts;

    public String getId() {
        return id;
    }

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

    ....SNIP....

    public Date getTs() {
        return ts;
    }

    public void setTs(Date ts) {
        this.ts = ts;
    }

任何指针将不胜感激。我正在使用 Spring 4.x。

【问题讨论】:

  • 我认为你的@RequestMapping 方法应该是POST。
  • @Rembo 这里的RequestMapping方法应该是'GET'。在我在模型中添加“日期”之前它就起作用了。
  • 使用Json格式而不是通过url传递数据
  • GET 没有命中,因为你的 url 是错误的,通过 send() 传递你的数据,现在你发送 null。在发送数据之前还要设置RequestHeader。
  • @Rembo 感谢您的回复..我会尝试添加 RequestHeader。但我不确定为什么在添加“日期”之前调用相同的“GET”方法。

标签: java spring spring-mvc request


【解决方案1】:

您可以使用@ModelAttribute 或@RequestBody 注释。

请参考这个Using @ModelAttribute on method argument

Existing stackoverflow question on @ModelAttribute

【讨论】:

    猜你喜欢
    • 2014-03-13
    • 2014-08-19
    • 1970-01-01
    • 1970-01-01
    • 2020-01-22
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多