Spring MVC:post 请求和 json 带有数组的对象:错误的请求
Spring MVC : post request and json object with array : bad request
我正在尝试使用 Spring MVC 从 http POST 请求中检索参数。
请求包含以下 json 对象(内容类型:application/json),它本身包含一个自定义对象数组:
{
"globalId":"338",
"lines":[
{
"id": "someId",
"lib":"blabla",
...
}
]
}
这是我尝试使用的代码:
@RequestMapping(method = RequestMethod.POST, value = "/valider")
@ResponseBody
public void valider(final HttpServletRequest request, @RequestParam("globalId") final String globalId, @RequestParam("lines") final MyCustomObject[] lines) {
我得到的只是一个 "bad request" 错误 (http 400)。
是否可以分别检索 "globalId" 和 "lines" 这两个参数?或者因为它们在同一个 json 对象中,所以必须将其视为具有单个参数?当 Post 请求中有多个参数时如何处理?
我认为您正在寻找类似`@RequestBody.创建一个 class 来表示您的 JSON 数据。在您的情况下,此 class 将包含两个成员变量 - globalId 作为字符串和 lines 作为它所代表的对象的数组。然后在您的控制器方法中,您将在此 class 类型上使用 @RequestBody 注释,以便 Spring 能够将 JSON 转换为对象。检查下面的示例。
http://www.leveluplunch.com/java/tutorials/014-post-json-to-spring-rest-webservice/
JQuery, Spring MVC @RequestBody and JSON - making it work together
http://www.techzoo.org/spring-framework/spring-mvc-requestbody-json-example.html
确实,我必须使用@RequestBody 来获取JSON 对象。
快速总结,取决于参数在 http POST 正文请求中的传递方式:
一个JSON对象(内容类型:application/json),使用@RequestBody 将 json 对象映射到 java 对象
多个参数(Content-Type:application/x-www-form-urlencoded),每个参数使用@RequestParam
创建模型对象以映射您的 Json 数据
class DLibrary{
int id;
String lib;
//getters/setters
}
class GLibrary{
int globalId;
List<DLibrary> lines;
//getters/setters
}
用下面的代码替换你的控制器代码
@RequestMapping(method = RequestMethod.POST, value = "/valider")
@ResponseBody
public void valider(@RequestBody GLibrary gLibrary) {
@RequestBody 注释将隐式地将 Json 映射到 Java 对象。
要实现此 spring 必须要求 jackson-core 和 jackson-mapper 库包含在您的应用程序中并且您的 Java class 应该有 getter 和 setter,即它必须遵循 bean 标准。
我正在尝试使用 Spring MVC 从 http POST 请求中检索参数。
请求包含以下 json 对象(内容类型:application/json),它本身包含一个自定义对象数组:
{
"globalId":"338",
"lines":[
{
"id": "someId",
"lib":"blabla",
...
}
]
}
这是我尝试使用的代码:
@RequestMapping(method = RequestMethod.POST, value = "/valider")
@ResponseBody
public void valider(final HttpServletRequest request, @RequestParam("globalId") final String globalId, @RequestParam("lines") final MyCustomObject[] lines) {
我得到的只是一个 "bad request" 错误 (http 400)。
是否可以分别检索 "globalId" 和 "lines" 这两个参数?或者因为它们在同一个 json 对象中,所以必须将其视为具有单个参数?当 Post 请求中有多个参数时如何处理?
我认为您正在寻找类似`@RequestBody.创建一个 class 来表示您的 JSON 数据。在您的情况下,此 class 将包含两个成员变量 - globalId 作为字符串和 lines 作为它所代表的对象的数组。然后在您的控制器方法中,您将在此 class 类型上使用 @RequestBody 注释,以便 Spring 能够将 JSON 转换为对象。检查下面的示例。
http://www.leveluplunch.com/java/tutorials/014-post-json-to-spring-rest-webservice/
JQuery, Spring MVC @RequestBody and JSON - making it work together
http://www.techzoo.org/spring-framework/spring-mvc-requestbody-json-example.html
确实,我必须使用@RequestBody 来获取JSON 对象。
快速总结,取决于参数在 http POST 正文请求中的传递方式:
一个JSON对象(内容类型:application/json),使用@RequestBody 将 json 对象映射到 java 对象
多个参数(Content-Type:application/x-www-form-urlencoded),每个参数使用@RequestParam
创建模型对象以映射您的 Json 数据
class DLibrary{
int id;
String lib;
//getters/setters
}
class GLibrary{
int globalId;
List<DLibrary> lines;
//getters/setters
}
用下面的代码替换你的控制器代码
@RequestMapping(method = RequestMethod.POST, value = "/valider")
@ResponseBody
public void valider(@RequestBody GLibrary gLibrary) {
@RequestBody 注释将隐式地将 Json 映射到 Java 对象。 要实现此 spring 必须要求 jackson-core 和 jackson-mapper 库包含在您的应用程序中并且您的 Java class 应该有 getter 和 setter,即它必须遵循 bean 标准。