如何使用 Springboot 在 REST 请求 URL 中将 json 对象作为参数传递

Posted

技术标签:

【中文标题】如何使用 Springboot 在 REST 请求 URL 中将 json 对象作为参数传递【英文标题】:How to pass a json object as a parameter in a REST request URL with Springboot 【发布时间】:2019-04-09 15:40:11 【问题描述】:

我查看了各种答案,但它们并没有解决我的问题。我有一个非常具体的客户需求,我无法使用请求的正文。

我查看了这些帖子:

Trying to use Spring Boot REST to Read JSON String from POST Parsing JSON in Spring MVC using Jackson JSON Pass JSON Object in Rest web method

注意:我确实对 URI 进行了编码。

我收到各种错误,但非法 html 字符就是其中之一。要求很简单:

编写一个接受以下请求的 REST 服务

GET /blah/bar?object=object11&object=object2&...

object 是一个 POJO,将采用以下 JSON 格式


    "foo": bar,  
    "alpha":        
        "century": a,
    

显然,我将阅读对象列表...

我的代码非常简化...如下。

 @RequestMapping(method=RequestMethod.GET, path = "/test")
 public Greeting test(@RequestParam(value = "object", defaultValue = "World") FakePOJO aFilter) 
     return new Greeting(counter.incrementAndGet(), aFilter.toString());
 

我也尝试将其封装为字符串并稍后转换,这也不起作用。

有什么建议吗?这应该非常简单,hello world spring rest tut 应该是一个很好的虚拟测试框架。

---- 编辑----

我发现杰克逊解析 json 的方式有一个基础。我已经解决了,但会写下来。我会在星期一之后提供确切的细节。简洁版本。为了使其适用于单个过滤器和多个过滤器,将其捕获为字符串并使用 json slurper

【问题讨论】:

“我也尝试将其封装为字符串并稍后转换,这也不起作用” - 为什么不起作用? JSON parameter in spring MVC controller的可能重复 编码时报错:java.lang.IllegalArgumentException: Invalid character found in the HTTP protocol 【参考方案1】:

如果您对 Map<String, String>MultiValueMap<String, String> 参数使用 @RequestParam 注释,则映射将填充您在 URL 中指定的所有请求参数。

 @GetMapping("/blah/bar")
 public Greeting test(@RequestParam Map<String, String> searchParameters) 
     ...
 

查看documentation 以获得更深入的解释。

【讨论】:

以上是关于如何使用 Springboot 在 REST 请求 URL 中将 json 对象作为参数传递的主要内容,如果未能解决你的问题,请参考以下文章

ControllerAdvice 的异常处理程序在使用 Spring Boot 的 Rest API 获取请求中不起作用。如何解决?

如何使用 JdbcTemplate 为我的 Rest 控制器编写单元测试类

SpringBoot2---对rest风格的支持

springBoot使用aop添加处理rest请求 打印请求时间 和请求参数

SpringBoot 中的 Rest 服务需要来自 GET 请求的 JSON 中的嵌套对象

为啥我登录后无法进入管理 REST API 请求映射 - Spring Boot