有没有简单的方法来测试@RequestBody方法?

时间:2014-04-07 01:51:12

标签: java spring-mvc

如果我的参数是@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但是没有用...

也许我需要为此做些额外的事情?

5 个答案:

答案 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,并声明响应符合您想要的形状。更多细节可以在这里找到:

http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/testing.html#spring-mvc-test-framework

答案 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/