Netflix Feign 发起 POST 请求

POST 请求是一种用于向服务器提交数据的方法。与 GET 请求主要用于获取数据不同,POST 请求的目的是改变服务器的状态,例如向服务器上传文件、提交表单数据(如用户注册、登录信息、商品订单等)。

例如,在一个电子商务网站的购物流程中,当用户完成商品选择并提交订单时,浏览器会向服务器发送一个 POST 请求。这个请求包含了用户的订单信息,如商品名称、数量、收货地址、支付方式等。服务器接收到这些数据后,会进行订单处理,如验证库存、计算价格、安排发货等,这一系列操作会改变服务器端的状态。

POST 请求格式为:

POST <请求URL> HTTP/协议版本

例如:

POST /submit-order HTTP/1.1

其中,POST 是请求方法,/submit-order 是请求的资源路径,HTTP/1.1 是 HTTP 协议版本。

准备工作

完整代码请参考“Netflix Feign 准备工作”章节的 UserController.java 类,下面将提供一个 POST 服务,用于创建用户,如下:

// POST 请求,创建新用户
@PostMapping("/createUser")
public CommonReturn<User> createUser(@RequestBody User user) {
    log.info("createUser() user={}", user);
    USERS.add(user);
    return CommonReturn.success(user).ext(appName, appPort);
}

上面代码使用 @RequestBody 注解从 POST 请求的 BODY 中获取数据,并且将数据自动封装为 User 类型对象。

编写 Feign 客户端

根据上面提供的服务接口信息,编写一个 Feign 客户端:

public interface UserFeign {

    // 看这里
    @RequestLine("POST /user/createUser")
    @Headers("Content-Type: application/json")
    CommonReturn<User> createUser(User user);

    // 创建Feign客户端实例的静态方法
    static UserFeign create() {
        return Feign.builder()
                .encoder(new JacksonEncoder())
                .decoder(new JacksonDecoder())
                .contract(new Contract.Default())
                .target(UserFeign.class, "http://localhost:8090/");
    }

}

上述示例中,通过 @Headers 注解添加了一个名为 Content-Type,值为 application/json 的请求头,后续将详细介绍 @Headers 注解的用法。

调用 Feign 客户端

完整代码请参考“Netflix Feign 准备工作”章节的 FeignController.java 类,下面仅仅给出了 demo4 方法的代码:

@RestController
public class FeignController {

    @GetMapping("/demo4")
    public CommonReturn<User> demo4(@RequestParam Long id, 
                                    @RequestParam String name, 
                                    @RequestParam Integer age) {
        return UserFeign.create().createUser(
            User.builder().id(id).name(name).age(age).build());
    }

}

上述代码,为了演示方便,用户通过 http://localhost:8080/demo04?id=100&name=Tom&age=100 地址去传递用户信息,后端手动构建一个 User 对象,然后将对象传递给 Feign 客户端的 createUser() 方法。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号