zoukankan      html  css  js  c++  java
  • Postman发送POST请求到Spring Boot的正确姿势

    最近用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)。

    ============= 华丽分隔符 ========================
    我司正在高薪招聘各种开发人才,北京、广州 Java高级研发、php高级管理岗位(全国范围,不限制)、测试、运维高级岗位。请在看机会的同学与我私信联系,或者加我微信号沟通:UUUUUTW。我是极客君,欢迎优秀人才用简历敲门,我真心内推!

  • 相关阅读:
    Memcache 内存分配策略和性能(使用)状态检查
    C# 中字符串转换成日期
    Task及Mvc的异步控制器 使用探索
    MVC项目实践,在三层架构下实现SportsStore-01,EF Code First建模、DAL层等
    从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十三║Vue实战:Vuex 其实很简单
    从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十一║Vue实战:开发环境搭建【详细版】
    vue-router 快速入门
    Vue.js——60分钟快速入门
    五小步让VS Code支持AngularJS智能提示
    AngularJS----服务,表单,模块
  • 原文地址:https://www.cnblogs.com/freephp/p/13619908.html
Copyright © 2011-2022 走看看