当前位置: 首页 > 面试题库 >

带有Spring和Jackson的REST完整数据绑定

双子民
2023-03-14
问题内容

我正在使用Spring MVC处理JSON POST请求。在幕后,我使用的是在Jackson
JSON处理器上构建的MappingJacksonHttpMessageConverter,并在使用mvc:annotation驱动时启用了该功能。

我的一项服务收到了一系列操作:

@RequestMapping(value="/executeActions", method=RequestMethod.POST)
    public @ResponseBody String executeActions(@RequestBody List<ActionImpl> actions) {
        logger.info("executeActions");
        return "ACK";
    }

我发现杰克逊将requestBody映射到java.util.LinkedHashMap项列表(简单数据绑定)。相反,我希望将请求绑定到类型对象列表(在本例中为“
ActionImpl”)。

我知道,如果直接使用Jackson的ObjectMapper,这很容易做到:

List<ActionImpl> result = mapper.readValue(src, new TypeReference<List<ActionImpl>>() { });

但是我想知道使用Spring MVC和MappingJacksonHttpMessageConverter时实现此目标的最佳方法是什么。有什么提示吗?

谢谢


问题答案:

我怀疑问题是由于类型擦除引起的,即,不是传递通用参数类型,而是仅传递了actions.getClass();这将提供与List <?>等效的类型。

如果是这样,一种可能性是使用中间子类,例如:

public class ActionImplList extends ArrayList<ActionImpl> { }

因为即使只传递类,这也会保留类型信息。因此:

public @ResponseBody String executeActions(@RequestBody ActionImplList actions)

会成功的 不是最佳,但应该可以。

我希望有更多Spring MVC知识的人可以阐明为什么不传递参数类型(也许是错误?),但是至少可以解决此问题。



 类似资料:
  • 主要内容:1 完整数据绑定的示例完整数据绑定是指将JSON映射到任何Java对象。 1 完整数据绑定的示例 1.1 编写核心类 MainApp: 1.2 运行测试 项目根目录下生成student.json文件,内容如下:  

  • 我正在尝试使用spring boot作为后端,Angular作为前端,并使用Neo4j数据库作为应用程序,它是一个面向图形的NoSQL数据库。我的问题是,我不知道如何在节点中使用复杂的数据,我的意思是。我正在编程的应用程序将基于microservices体系结构,其中Angular(前端)中的应用程序将通过spring boot制作的后端Rest API插入并使用数据,该API将数据存储在运行Ne

  • 我使用本教程使用REST访问JPA数据,创建了一个简单的RESTful Web服务,用于访问数据库中的一些数据。它工作得很好。我喜欢它有多简单,我或多或少了解它的工作原理。 但是,有人要求我添加一些自定义日志记录。每当Web服务被调用日志时,都会生成“Start-time”,并在服务返回之前生成另一个日志“End-time”。有没有办法在不破坏我的包含@Query anotation的方法的情况下

  • 我正在使用Spring MVC RESTful Web服务 组织。springframework。网状物客户ResourceAccessException:POST请求“http://”时发生I/O错误:服务器返回了URL:http://嵌套异常为java的http响应代码:415。伊奥。IOException:服务器返回了URL:HTTP:的HTTP响应代码:415// 原因:java。伊奥。I

  • 我是Spring的新手,正在注册一个用户。我确实喜欢这个。 这很好,但这里的问题是,在我的欢迎中,我不需要这个用户对象。jsp页面,那么为什么要使模型对象更重呢。因此,我尝试了不使用ModelAttribute,这也适用于我,如下所示。 所以我只想知道什么是专业 我想将我的查询分类为以下4种类型的request.what如果我不需要在视图中发送数据并且我的请求是任何- 查询字符串即GET中的表单数

  • 我有以下问题:我正在使用Koin进行DI和持久化的空间。现在我的房间依赖关系如下: 但是我得到了这里描述的错误:Android room Persistent:AppDatabase_Impl不存在 Koin模块定义: 怎么会这样呢?