无法使用 Spring Boot Rest 服务将 JSON 转换为 Java 对象

Posted

技术标签:

【中文标题】无法使用 Spring Boot Rest 服务将 JSON 转换为 Java 对象【英文标题】:Unable to convert JSON to Java Object using Spring boot Rest service 【发布时间】:2015-06-11 11:06:12 【问题描述】:

我已经使用 spring boot 创建了一个 REST 服务。最初我有多个参数(字符串和整数),但建议我以 json 格式发送请求并自动将其转换为对象。但是当我调用以下 REST 服务时,出现以下错误:

无法将类型“java.lang.String”的值转换为所需类型“x.x.x.MobileCreatives”

@RequestMapping(method = RequestMethod.POST, value = "/creative")
    public @ResponseBody void uploadCreative(@RequestParam("mobileCreatives") MobileCreatives mobileCreatives,
                                             @RequestParam("file") MultipartFile file)

        logger.trace("Sending creative to DFP");
        mobileCreatives.setFile(file);
        dfpAssetsManager.createCreative(mobileCreatives);
    

我想知道为什么它认为输入是一个字符串,当输入是以下JSON时:

"networkCode":6437988,"iO":"test345345","name":"test4354","advertiserId":11659988,"clickThroughUrl":"test.com"

我的 MobileCreative 类有一个与 json 格式相同的构造函数。我是否需要向 MobileCreative 类添加任何注释,因为我正在查看的示例没有任何注释?

【问题讨论】:

试试 RequestBody MobileCreative movileCreative 【参考方案1】:

你想要@RequestPart 而不是@RequestParam。根据文档...

主要区别在于方法参数不是String时, @RequestParam 依赖于通过注册的 Converter 进行类型转换或 PropertyEditor 而@RequestPart 依赖于 HttpMessageConverters 考虑到请求的“Content-Type”标头 部分。 @RequestParam 可能与名称-值表单字段一起使用 而@RequestPart 可能与包含更多内容的部分一起使用 复杂的内容(例如 JSON、XML)

【讨论】:

以上是关于无法使用 Spring Boot Rest 服务将 JSON 转换为 Java 对象的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Spring Boot 自动配置访问 REST 控制器

端口6000无法访问Spring Boot Swagger REST服务器由于localhost不安全错误

使用 Kotlin 协程的 Spring Boot Rest 服务

Spring Boot REST 服务:JSON 反序列化不起作用

我可以使用 REST Web 服务和 Spring Boot 将 servlet 中的应用程序转换为 Spring 吗?

无法从 JUnit 中的 Spring Boot 读取应用程序属性?