将多个参数传递给Rest API-Spring
我试图弄清楚是否可以将JSON对象传递给rest API,或者将多个参数传递给该API?以及如何在Spring中读取这些参数?假设url看起来像以下示例:
例1 http://localhost:8080/api/v1/mno/objectKey?id=1&name=saif
像下面的URL中那样传递JSON对象是否有效?
例2 http://localhost:8080/api/v1/mno/objectKey/{"id":1, "name":"Saif"}
问题:
1)是否可以像在Ex.2中一样将JSON对象传递给url?
2)如何传递和解析示例1中的参数?
我试图编写一些方法来实现自己的目标,但是找不到正确的解决方案?
我试图将JSON对象传递为@RequestParam
http://localhost:8080/api/v1/mno/objectKey?id=1 发生意外错误 (type=Unsupported
Media Type, status=415). Content type 'null' not supported
http://localhost:8080/api/v1/mno/objectKey/id=1 发生意外错误 (type=Not Found,
status=404). No message available
http://localhost:8080/api/v1/mno/objectKey/%7B%22id%22:1%7D 发生意外错误
(type=Not Found, status=404). No message available
@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;
        }
    }
回答:
(1)是否可以像在Ex.2中一样将JSON对象传递给url?
否,因为http://localhost:8080/api/v1/mno/objectKey/{"id":1,
"name":"Saif"}这不是有效的网址。
如果您想以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)如何传递和解析示例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
}
以上是 将多个参数传递给Rest API-Spring 的全部内容, 来源链接: utcz.com/qa/414084.html
