当前位置: 首页 > 知识库问答 >
问题:

将多个参数传递给RESTAPI-Spring

苏昊英
2023-03-14

我试图找出是否有可能传递一个JSON对象RestAPI,或传递多个参数到该API?如何在Spring中读取这些参数?让我们假设url看起来像下面的例子:

例1<代码>http://localhost:8080/api/v1/mno/objectKey?id=1

传递下面url中的JSON对象是否有效?

例2<代码>http://localhost:8080/api/v1/mno/objectKey/{“id”:1,“name”:“Saif”}

问题:

1) 是否可以像Ex.2那样将JSON对象传递给url?

2)我们如何传递和解析Ex1中的参数?

我试图写一些方法来实现我的目标,但找不到正确的解决方案?

我试图将JSON对象作为@RequestParam传递

http://localhost:8080/api/v1/mno/objectKey?id=1出现意外错误(type=Unsupport Media Type, state=415)。不支持内容类型null

http://localhost:8080/api/v1/mno/objectKey/id=1出现意外错误(类型=未找到,状态=404)。没有可用的消息

http://localhost:8080/api/v1/mno/objectKey/{"id": 1}有一个意外的错误(type=未找到,state=404)。没有可用的消息

@RequestMapping(value="mno/{objectKey}",
                method = RequestMethod.GET, 
                consumes="application/json")
    public List<Book> getBook4(@RequestParam ObjectKey objectKey) {
        ...
    }

我试图将JSON对象作为@PathVariable传递

@RequestMapping(value="ghi/{objectKey}",method = RequestMethod.GET)
    public List<Book> getBook2(@PathVariable ObjectKey objectKey) {
        ...         
    }

我创建这个对象是为了保存id参数和其他参数,如name等。。。。

class ObjectKey{
        long id;
        public long getId() {
            return id;
        }
        public void setId(long id) {
            this.id = id;
        }
    }

共有3个答案

傅正阳
2023-03-14

可以如下所示给出多个参数,

    @RequestMapping(value = "/mno/{objectKey}", method = RequestMethod.GET, produces = "application/json")
    public List<String> getBook(HttpServletRequest httpServletRequest, @PathVariable(name = "objectKey") String objectKey
      , @RequestParam(value = "id", defaultValue = "false")String id,@RequestParam(value = "name", defaultValue = "false") String name) throws Exception {
               //logic
}
羿经武
2023-03-14

您可以在url中传递多个参数,如

http://localhost:2000/custom?brand=dell

为了得到这个查询字段,您可以使用map-like

    @RequestMapping(method = RequestMethod.GET, value = "/custom")
    public String controllerMethod(@RequestParam Map<String, String> customQuery) {

        System.out.println("customQuery = brand " + customQuery.containsKey("brand"));
        System.out.println("customQuery = limit " + customQuery.containsKey("limit"));
        System.out.println("customQuery = price " + customQuery.containsKey("price"));
        System.out.println("customQuery = other " + customQuery.containsKey("other"));
        System.out.println("customQuery = sort " + customQuery.containsKey("sort"));

        return customQuery.toString();
    }
许兴文
2023-03-14

(1) 是否可以像Ex.2那样将JSON对象传递给url?

不,因为http://localhost:8080/api/v1/mno/objectKey/{“id”:1,“name”:“Saif”}不是有效的URL。

如果您想使用RESTful方式,请使用http://localhost:8080/api/v1/mno/objectKey/1/Saif,并将您的方法定义为:

@RequestMapping(path = "/mno/objectKey/{id}/{name}", method = RequestMethod.GET)
public Book getBook(@PathVariable int id, @PathVariable String name) {
    // code here
}

(2) 我们如何传递和解析Ex.1中的参数?

只需添加两个请求参数,并给出正确的路径。

@RequestMapping(path = "/mno/objectKey", method = RequestMethod.GET)
public Book getBook(@RequestParam int id, @RequestParam String name) {
    // code here
}

更新(来自评论)

如果我们有一个复杂的参数结构呢?

"A": [ {
    "B": 37181,
    "timestamp": 1160100436,
    "categories": [ {
        "categoryID": 2653,
        "timestamp": 1158555774
    }, {
        "categoryID": 4453,
        "timestamp": 1158555774
    } ]
} ]

将其作为POST发送,JSON数据在请求正文中,而不是URL中,并指定application/JSON的内容类型。

@RequestMapping(path = "/mno/objectKey", method = RequestMethod.POST, consumes = "application/json")
public Book getBook(@RequestBody ObjectKey objectKey) {
    // code here
}
 类似资料:
  • 问题内容: 在我的我有一个按钮。我想通过在方法中传递多个参数来为其添加动作。 问题答案: 也许你可以做这样的事情 根据您的要求创建标签值并保持其完整性。

  • 问题内容: 在采用可变数目从该给出的函数被调用iterables的。 如果我有一个生成元组的生成器,这些元组通常在原位打开,该如何命名? 以下代码不起作用,因为每个生成的元组均作为map的不同参数给出: 没有生成器,要映射的所需参数可能如下所示: 问题答案: 您需要删除的电话: 这将调用,时间,应在何处接受一个参数。 在Linux上 ,如果要接受两个参数,则可以使用lambda调用,例如:

  • 问题内容: 我有以下jQuery代码在aspx页面中调用webmethod 这是网络方法签名 这很好。 但是现在我需要将两个参数传递给Web方法 新的网络方法如下所示 如何更改客户端代码以成功调用此新方法签名? 编辑: 以下2种语法有效 和 其中filter和locale是局部变量 问题答案: 不要使用字符串串联来传递参数,只需使用数据哈希即可: 更新: 正如@Alex在注释部分所建议的那样,AS

  • 问题内容: 我需要某种方法来使用pool.map()中的一个函数,该函数接受多个参数。根据我的理解,pool.map()的目标函数只能有一个可迭代的参数,但是有没有办法我也可以传入其他参数呢?在这种情况下,我需要传递一些配置变量,例如Lock()并将信息记录到目标函数中。 我试图做一些研究,我认为我也许可以使用部分函数来使其工作?但是,我不完全了解这些工作原理。任何帮助将不胜感激!这是我要执行的简

  • 问题内容: 我正在使用Go内置的http服务器,并拍拍来响应一些URL: 我需要向该处理函数传递一个额外的参数-一个接口。 如何向处理程序函数发送额外的参数? 问题答案: 通过使用闭包,您应该能够做您想做的事情。 更改为以下内容(未测试): 然后对

  • 我在解一个有很多常数的非线性方程 我创建了一个用于解决以下问题的函数: 然后我想做: 但是正在解包并向函数传递太多参数,因此我得到: TypeError:terminalV()正好接受2个参数(给定6个) 那么,我的问题是,我是否可以通过某种方式将元组传递给调用的函数?