我将使用哪些 Spring 注释将 GET 和 POST 变量混合为同一方法的参数?
What Spring annotations would I use to mix GET and POST variables as arguments on the same method?
我有一个看起来像这样的方法:
@RestController
@org.springframework.context.annotation.Scope("request")
@RequestMapping(value = "/path/to", produces = "application/json; charset=utf-8")
public class MyController {
Thing thing;
@RequestMapping("/myMethod")
@ResponseBody
public String myMethod(
@RequestParam(value="storeIds", required=false) List<String> storeIds,
@RequestParam(value="startDate") Date startDate,
@RequestParam(value="endDate") Date endDate
) throws Exception {
JSONObject json = thing.getJson(startDate, endDate, storeIds);
return json.toString();
}
}
如您所见,现在它接受三个参数,它们都作为 GET 变量传入。我想要做的是让 startDate 和 endDate 参数仍然作为 GET 变量出现,但 storeIds 参数作为 POST 变量出现。我担心如果我只是将 @RequestMapping 注释更改为 POST 方法,那么它将期望所有三个参数都是 POST 变量。
有什么方法可以实现我的要求吗?
GET
请求和 POST
请求之间的区别,除了 "getting" 与 "posting" 的隐含语义(以及相关的可能后果缓存、重新加载等),只是 POST
请求有 body,而 GET
请求没有。 (即使有 POST
请求,body 也可以为空:zero-length body 是有效的。)这意味着 GET
请求可以 only 通过 URL 获取参数,而 POST
请求可以通过 URL either 或通过body(或者一些通过一个,一些通过另一个)。
从上面的评论中,我了解到您使用术语 "GET variable" 来表示 URL 参数,即使在 POST 请求中也是如此;但实际情况是 URL 参数适用于两种请求方法。
我有一个看起来像这样的方法:
@RestController
@org.springframework.context.annotation.Scope("request")
@RequestMapping(value = "/path/to", produces = "application/json; charset=utf-8")
public class MyController {
Thing thing;
@RequestMapping("/myMethod")
@ResponseBody
public String myMethod(
@RequestParam(value="storeIds", required=false) List<String> storeIds,
@RequestParam(value="startDate") Date startDate,
@RequestParam(value="endDate") Date endDate
) throws Exception {
JSONObject json = thing.getJson(startDate, endDate, storeIds);
return json.toString();
}
}
如您所见,现在它接受三个参数,它们都作为 GET 变量传入。我想要做的是让 startDate 和 endDate 参数仍然作为 GET 变量出现,但 storeIds 参数作为 POST 变量出现。我担心如果我只是将 @RequestMapping 注释更改为 POST 方法,那么它将期望所有三个参数都是 POST 变量。
有什么方法可以实现我的要求吗?
GET
请求和 POST
请求之间的区别,除了 "getting" 与 "posting" 的隐含语义(以及相关的可能后果缓存、重新加载等),只是 POST
请求有 body,而 GET
请求没有。 (即使有 POST
请求,body 也可以为空:zero-length body 是有效的。)这意味着 GET
请求可以 only 通过 URL 获取参数,而 POST
请求可以通过 URL either 或通过body(或者一些通过一个,一些通过另一个)。
从上面的评论中,我了解到您使用术语 "GET variable" 来表示 URL 参数,即使在 POST 请求中也是如此;但实际情况是 URL 参数适用于两种请求方法。