Java 使用Jackson框架的@RequestBody注释的Spring引导ObjectMapper

Java 使用Jackson框架的@RequestBody注释的Spring引导ObjectMapper,java,jquery,ajax,spring,spring-mvc,Java,Jquery,Ajax,Spring,Spring Mvc,嗨,伙计们 我有一些数据,由jQuery数据表提供,我使用Ajax和数据元素发送给Spring控制器。更具体地说,ajax函数片段是: $.ajax({ url: "../todaydatarecover.json", type: "post", data: dataToSend, 正如我在Stack上的另一篇文章中所解释的,我在控制器中使用了(导致“

嗨,伙计们

我有一些数据,由jQuery数据表提供,我使用Ajax和数据元素发送给Spring控制器。更具体地说,ajax函数片段是:

$.ajax({
                        url: "../todaydatarecover.json",
                        type: "post",
                        data: dataToSend,
正如我在Stack上的另一篇文章中所解释的,我在控制器中使用了(导致“数据”的存在)RequestBody注释:

@PostMapping(value="/todaydatarecover.json")


@ResponseBody
    public ModelAndView todayInfoAndIdRecover(ModelAndView model, HttpServletRequest request,
            @RequestBody TodayData todayData) throws IOException
    {   
而且,正如我所解释的,我创建了一个类,该类包含ajax发送给控制器的变量;在方法符号中,您可以确定她的名字是TodayData。这就是实现:

public class TodayData 
{
    private long dateInBox;
    private String nameInBox;
    private String typeInBox;

<follow setters and getters>
放在
公共类MVCConfigureAdapter
文件中的配置扩展了WebMVCConfigureAdapter

数据作为对象传递给控制器:

$('#eventsdatageneral').on('click', '.btn.btn-info', function(event) 
            {
                var today_date = new Date().getTime(); 
                var dataToSend = new Object();
                dataToSend.dateInBox= today_date;
                dataToSend.nameInBox = host_name;
                dataToSend.typeInBox = type_name;
问题是,当我单击必须启用发送的按钮时,出现404错误。

对象似乎格式良好;在控制台上,我得到了这个:

参数似乎是正确的:

我在Java控制台上没有错误


所以,我不明白的是,如果我错误地配置了对象映射器,或者取决于我在控制器上实现了什么,或者其他。

您使用的是
@RequestBody
这意味着您的控制器需要一个有效负载,所以您需要在发送它之前序列化您的JavaScript对象,否则,它将作为url表单发送

$.ajax({
  url: "../todaydatarecover.json",
  type: "post",
  data: JSON.stringify(dataToSend),
  ...
});
此外,您的请求映射看起来是错误的。您返回的是
模型和视图
,但使用的是
@ResponseBody
。它们不应该一起使用,将
ModelAndView
返回到ajax请求是没有意义的

我建议您从请求映射中删除扩展(
.json
)。它应该只是:

@PostMapping(value="/todaydatarecover")

您需要在代码中做一些更改

  • 您需要创建JSON对象,如下所示,以便将其与Java POJO类绑定
    TodayData

    $('eventsdatageneral')。在('click','.btn.btn info',函数(事件)
    {
    var today_date=new date().getTime();
    var dataToSend={};
    dataToSend[“dateInBox”]=今天\u日期;
    dataToSend[“nameInBox”]=主机名;
    dataToSend[“typeInBox”]=键入\u名称;

  • 发送ajax请求时,需要使用JSON.stringify函数,该函数将javascript对象转换为JSON

    $.ajax({
    url:“../todaydatarecover.json”,
    类型:“post”,
    数据:JSON.stringify(dataToSend),

  • 同样正如alfcope提到的,
    ModelAndView
    @ResponseBody
    不应该一起使用,因为当我们在方法上使用
    @ResponseBody
    时,我们是说我们不希望生成视图,并且对象将作为响应体的一部分返回

  • 检查您为此应用程序所做的配置中的
    url模式
    ,或者更正您作为
    .json
    发送的url


  • 使用PostMapping注释,您不需要指定@ResponseBody to方法。您还必须返回一个POJO对象而不是ModelAndView来写回对REST服务的响应。此外,您还从PostMapping.Thnaks@RahulO中删除了.json。您的响应使我的代码正常工作。我非常感谢。
    @PostMapping(value="/todaydatarecover")