java - 使用 Jackson Framework 进行 @RequestBody 注释的 Spring Boot ObjectMapper

标签 java jquery ajax spring spring-mvc

大家好。

我有一些由 jQuery DataTable 给出的数据,我使用 Ajax 和数据元素将其发送到 Spring Controller 。更具体地说,ajax函数片段是:

$.ajax({
                        url: "../todaydatarecover.json",
                        type: "post",
                        data: dataToSend,

正如我在 Stack 上的另一篇文章中所解释的那样,我在 Controller 中使用了(因为存在“数据”)RequestBody 注释:

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


@ResponseBody
    public ModelAndView todayInfoAndIdRecover(ModelAndView model, HttpServletRequest request,
            @RequestBody TodayData todayData) throws IOException
    {   

并且,正如我所解释的,我创建了一个类,其中包含由ajax发送到 Controller 的变量;在方法标志中,您可以看到她的名字是TodayData。这是实现:

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

<follow setters and getters>

在网上搜索,我发现可能需要对对象映射器进行显式设置;所以,我为我的配置(Spring Boot 和 Jackson Framework,都是上一个版本)找到了这个:

@Bean
     public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
      MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter();
      ObjectMapper objectMapper = new ObjectMapper();
      objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
      jsonConverter.setObjectMapper(objectMapper);
      return jsonConverter;
     }

它被放入公共(public)类MvcConfiguration扩展WebMvcConfigurerAdapter文件中。

数据作为对象传递到 Controller :

$('#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 错误。

该对象看起来格式良好;在控制台上,我得到了这个:

Object response

参数似乎是正确的:

Object Parameters

我在 Java 控制台上没有收到错误;

所以,我不明白的是,我是否错误地配置了对象映射器,或者取决于我在 Controller 或其他设备上实现的内容。

最佳答案

您需要对代码进行一些更改

  1. 您需要创建如下 JSON 对象,以便将其与 Java POJO 类绑定(bind) TodayData:

    $('#eventsdatageneral').on('click', '.btn.btn-info', 函数(事件) { var Today_date = new Date().getTime(); var dataToSend = {}; dataToSend["dateInBox"] = Today_date; dataToSend["nameInBox"] = 主机名; dataToSend["typeInBox"] = type_name;

  2. 发送 ajax 请求时,您需要使用 JSON.stringify 函数,它将您的 javascript 对象转换为 JSON。

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

  3. 另外正如alfcope提到的,ModelAndView@ResponseBody不应该一起使用,因为当我们使用在方法上@ResponseBody,我们是说我们不希望生成 View ,并且该对象将作为响应正文的一部分返回。

  4. 检查您为此应用程序所做的配置中的 url-pattern,或者更正您以 .json 形式发送的 URL。

关于java - 使用 Jackson Framework 进行 @RequestBody 注释的 Spring Boot ObjectMapper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45672295/

相关文章:

java - 从 main 方法调用 void 方法,不能在 void 方法内传递参数

javascript - 使用 JavaScript(和 JQuery)将内容动态添加到 HTML 页面 - 如何访问新内容?

javascript - 如何存储不完整的多步骤表单?

javascript - 两个函数不能一起工作,但没有错误

jquery - 如何结合每个然后

java - 如何使用 Spring Boot 摄取 Json 字符串数组

java - 在 Java 中读取输入文件并写入输出文件

java - 如何使用apache common vfs上传字节数组

php - AJAX 无法将数据发送到 PHP

javascript - 在 puppeteer 解决特定事件的 promise