Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有简单的方法来测试@RequestBody方法?_Java_Spring Mvc - Fatal编程技术网

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

Java 有没有简单的方法来测试@RequestBody方法?,java,spring-mvc,Java,Spring Mvc,如果我有一个@Controller方法,其参数是@RequestBody参数,我通常需要编写一些jQuery脚本或类似的东西来使用JSON对象执行AJAX请求,以便调用该方法。如果我试图通过web浏览器直接调用该方法,它将返回一个错误415 Unsupported Media Type 除了使用浏览器快速调用这种方法而不必编写一些jQuery代码之外,还有其他方法吗?比如在URL/地址栏中编写JSON对象的方法? 代码: 可能Spring会自动填充一个新的TestParams实例,并将该属性设置

如果我有一个
@Controller
方法,其参数是
@RequestBody
参数,我通常需要编写一些jQuery脚本或类似的东西来使用
JSON
对象执行AJAX请求,以便调用该方法。如果我试图通过web浏览器直接调用该方法,它将返回一个错误
415 Unsupported Media Type

除了使用浏览器快速调用这种方法而不必编写一些
jQuery
代码之外,还有其他方法吗?比如在URL/地址栏中编写
JSON
对象的方法?

代码:

可能Spring会自动填充一个新的TestParams实例,并将该属性设置为1,但这不起作用


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

您可以向getTestCall方法添加请求参数:

@RequestParam(value = "testNumber", required = false, defaultValue = "") String testNumber

带注释参数的
@RequestBody
的要点是,Spring MVC堆栈使用HTTP请求体生成一个将绑定到参数的参数。因此,您需要提供一个请求主体。发送请求正文对于GET请求来说是非常不典型的。因此,浏览器通常不支持它,至少在地址栏中输入地址并提交请求时不支持


您需要使用不同的HTTP客户机,如jQuery。我通常在Eclipse中有一个小型Java项目,该项目使用ApacheHTTP组件客户端进行设置,该客户端可以向任何服务器发送HTTP请求。设置正确的请求正文并运行需要几秒钟/分钟。

有一个叫做高级REST客户端的chrome应用程序。您可以使用此chrome应用程序将json格式的数据传递给控制器。例如,json数据是

id:1

名称:“xyz”

而控制器可以具有@RequestBody Person表单

Person类将是一个POJO,其id和名称作为实例变量。Spring会自动将json数据映射到表单

我认为这是检查spring控制器最简单、最简单的方法。

我花了去年的时间构建了一个RESTAPI,到目前为止,手动使用该API的最好方法是使用Chrome扩展Postman。我对这个工具的推荐还不够

要测试您的简单示例,您需要使用POSTMAN调用一个POST(我假设您有一个请求主体,但您的控制器方法没有定义HTTP动词)(如以下示例所示):

如果您想自动测试API(我推荐),可以使用优秀的SpringMVC测试项目。这允许您通过类似rest的DSL调用API,并断言响应是您想要的形状。更多详细信息可在此处找到:


据我所知,您可以将JSON对象发送到webbrowser,它将在不需要AJAX的情况下显示出来

有用的教程:

你的意思是,不使用RequestBody?这对我没有帮助,因为我需要处理的对象不是一堆传递的参数。。。我知道我的示例只使用了一个参数,但我的大多数实际情况都涉及具有许多属性的对象,因此主要是为了保持简洁,我们在对象上使用RequestBody标记也许我不需要@RequestBody?我是否可以使用另一个标记,在方法签名中它是一个对象,但请求本身正在传递键/值对,就像您将映射到PathParam变量一样,只是它们都是该对象的属性?Spring只会用这些查询字符串属性填充对象的实例?@Trant您需要什么取决于您,但是,是的,
@modeldattribute
注释参数将从请求参数构造。这些可以作为查询字符串的一部分发送。谢谢,ModelAttribute可以做到这一点!知道为什么不能将JSONDeserializer与ModelAttribute属性结合使用吗?比如,如果我有一个日期,我想以特定的字符串格式发送。。。Spring以400错误请求拒绝它,并忽略任何反序列化程序annotation@Trant因为Spring不使用任何
HttpMessageConverter
s进行转换,因此不使用Jackson。有关日期,请查看
DateTimeFormat
http://localhost/testCall?testNumber=1
@RequestParam(value = "testNumber", required = false, defaultValue = "") String testNumber
POST /contextRoot/testCall
{
  "testNumber": 1
}