Postman发送POST请求到Spring Boot

发表于:2020-9-08 09:38

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:freephp    来源:博客园

  最近用Spring Boot搭建了一些restful api,写起来真的很爽。但是当用Postman测试一些POST请求的接口的时候却遇到一些问题,上网冲浪查了一堆博客资料,发现都讲得不清不楚,于是记录下来希望也能让同道少走弯路。
  假设有一个POST请求的接口是接受一个对象而不是单个参数,如注册接口,需要传递一个MynUser对象,该对象的结构如下:
  @Data
  @AllArgsConstructor
  @NoArgsConstructor
  public class MyUser {
      private String username;
      private String password;
  }
  我们的Controller文件中接口是这样的:
  public class UserController {
      @Autowired
      UserService userService;
      @Autowired
      TokenService tokenService;
      
      @PostMapping("/register")
      public JsonResultObject register(@RequestBody MyUser user) {
          // other logic codes, just skip it
          return userService.register(user);
      }
  }
  在login方法上传入的是一个对象LoginUser,需要用到@RequestBody注解。一旦使用了这个注解,Postman的请求头里面要设置成"Content-Type:application/json"。否则会出现图1的报错,然而光是这样设置还是不够的。
图1 unspported Media Type
  如果在Postman中使用form-data或者x-www-form-urlencoded方式,如图2所示,则会有JSON parse error。
图2 json parse报错
  千万别以为自己使用的第三方json包出问题了,网上还有人说是因为使用的jackson的版本和Spring Boot版本不匹配,其实真不见得是这个问题。正确的做法是,使用raw方式填写json字符串即可,如图3所示:
图3 成功请求
  终于成功注册了一个用户,喜大普奔啊!
  另外,如果是传递单个参数,可以使用@RequestParam,那么Postman就可以使用form-data方式传递了,这很简单。
  经过这个事情,让我想到了几年前还在写NodeJS项目的岁月,在和腾讯团队和yh团队对接接口的时候,貌似传递post参数也是需要用raw方式传递,否则那边处理不了,腾讯微信后台是用的C++,而yh是用的Java(估计是Spring)。

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号