java - 如何在 Spring MVC 中将 JSON 有效负载发布到 @RequestParam

标签 java rest spring-mvc spring-boot

我正在使用 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 Controller 中:

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 参数设置为字符串并在 Controller 方法中解析有效负载,但这违背了使用 Spring MVC 的要点。

如果我使用 @RequestBody 一切正常,但是我失去了在 JSON 主体之外发布单独参数的可能性。

在 Spring MVC 中有没有办法“混合”普通的 POST 参数和 JSON 对象?

最佳答案

是的,可以使用 post 方法同时发送参数和正文: 服务器端示例:

@RequestMapping(value ="test", method = RequestMethod.POST)
@ResponseStatus(HttpStatus.OK)
@ResponseBody
public Person updatePerson(@RequestParam("arg1") String arg1,
        @RequestParam("arg2") String arg2,
        @RequestBody Person input) throws IOException {
    System.out.println(arg1);
    System.out.println(arg2);
    input.setName("NewName");
    return input;
}

在你的客户端上:

curl -H "Content-Type:application/json; charset=utf-8"
     -X POST
     'http://localhost:8080/smartface/api/email/test?arg1=ffdfa&arg2=test2'
     -d '{"name":"me","lastName":"me last"}'

享受

关于java - 如何在 Spring MVC 中将 JSON 有效负载发布到 @RequestParam,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38262055/

相关文章:

java - 关于 Spring MVC 与 bootstrap 的问题

java - Spring sseEmitter,调用方法发送后不会立即发送事件

jquery - 从第 0 行的数据源请求未知参数 '1'(JTable 问题)

java - "turn right"和 "turn left"在固定内存填区法中是什么意思?

javascript - Docker for Windows REST API - 启用 CROSS

java - 如何使用 REST API 在 Jira 中创建问题?

rest - 为什么在 REST 实现中的 URI 中包含 Action 动词会违反协议(protocol)?

java - 在 javafx 中选择不同选项卡时更改阶段 titleProperty

java - 2 个类相互引用可以吗?

java - 如何按字母顺序对数组排序,标点符号优先