如果我的参数是@Controller
param的@RequestBody
方法,我通常必须编写一些jQuery脚本或类似的东西来执行带有JSON
对象的AJAX请求,以便叫那个方法。如果我尝试直接通过Web浏览器调用该方法,则会返回错误415 Unsupported Media Type
。
有没有其他选择只需使用浏览器快速调用此方法而无需编写一些jQuery
代码?或许可以在网址/地址栏中编写JSON
对象?
代码:
@RequestMapping("testCall")
@ResponseBody
public List<TestObject> getTestCall (@RequestBody TestParams testParams) {
return stuff;
}
public class TestParams {
private Integer testNumber;
//getter/setter for testNumber
}
我想也许我可以做:
http://localhost/testCall?testNumber=1
也许Spring会自动填充一个新的TestParams实例,该属性设置为1但是没有用...
也许我需要为此做些额外的事情?
答案 0 :(得分:2)
@RequestBody
带注释的参数的重点是Spring MVC堆栈使用HTTP请求体来生成将绑定到参数的参数。因此,您需要提供请求正文。发送请求正文对于GET请求非常不典型。因此,浏览器通常不支持它,至少不是在地址栏中输入地址并提交请求时。
您需要使用不同的HTTP客户端,例如jQuery。我通常在Eclipse中有一个小型Java项目,它使用Apache HTTP组件客户端进行设置,该客户端可以将HTTP请求发送到任何服务器。设置正确的请求正文并运行需要几秒钟/分钟。
答案 1 :(得分:2)
我在去年建立了一个REST API,到目前为止,手动运行该API的最佳方法是使用Chrome Extension,Postman。我不能推荐这个工具。
https://chrome.google.com/webstore/detail/postman-rest-client/fdmmgilgnpjigdojojpjoooidkmcomcm?hl=en
要测试您的简单示例,您需要使用POSTMAN到您的Url调用POST(我假设您有一个请求正文,但您的控制器方法没有定义HTTP动词)(如下例所示) :
POST /contextRoot/testCall
{
"testNumber": 1
}
如果您想自动测试API(我推荐),您可以使用优秀的Spring Mvc Test项目。这允许您通过类似其他类似的DSL调用API,并声明响应符合您想要的形状。更多细节可以在这里找到:
答案 2 :(得分:0)
您可以向getTestCall方法添加请求参数:
@RequestParam(value = "testNumber", required = false, defaultValue = "") String testNumber
答案 3 :(得分:0)
有一款名为Advanced REST client的Chrome应用。您可以使用此Chrome应用程序将json形式的数据传递给您的控制器。例如。 json数据是
ID:1,
名: “XYZ”
而控制器可以有@RequestBody Person表单。
Person类是一个具有id和name作为实例变量的POJO。 Spring会自动将json数据映射到表单。
我认为这是检查弹簧控制器最简单,最简单的方法。 Check the extension Advanced REST client here
答案 4 :(得分:0)
据我所知,你可以将JSON对象发送到webbrowser,它将在不需要AJAX的情况下显示。
有用的教程: http://www.mkyong.com/spring-mvc/spring-3-mvc-and-json-example/