【发布时间】:2016-11-10 18:01:28
【问题描述】:
我正在使用 Spring Boot(最新版本,1.3.6),我想创建一个 REST 端点,它接受一堆参数和 JSON 对象。比如:
curl -X POST http://localhost:8080/endpoint \
-d arg1=hello \
-d arg2=world \
-d json='{"name":"john", "lastNane":"doe"}'
在我目前正在做的 Spring 控制器中:
public SomeResponseObject endpoint(
@RequestParam(value="arg1", required=true) String arg1,
@RequestParam(value="arg2", required=true) String arg2,
@RequestParam(value="json", required=true) Person person) {
...
}
json 参数不会被序列化为 Person 对象。
我得到一个
400 error: the parameter json is not present.
显然,我可以将 json 参数设为 String 并在控制器方法中解析有效负载,但这违背了使用 Spring MVC 的意义。
如果我使用@RequestBody,这一切都有效,但是我失去了在 JSON 正文之外发布单独参数的可能性。
Spring MVC 中有没有办法“混合”普通的 POST 参数和 JSON 对象?
【问题讨论】:
-
我认为没有办法,我认为混合表单编码数据和 json 数据不是一个好主意。决定是否要接受其中一个。
-
很多 API(Stripe、Plaid、Stormpath)使用这种方法在逻辑上分离请求数据(例如,如果我正在搜索,我可以将搜索条件放在 Json 表示中并保持分页表单的表单编码位中的数据)。但我明白你的意思。
标签: java rest spring-mvc spring-boot