前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >后知后觉,Java枚举值也可以作为HTTP接口传参!

后知后觉,Java枚举值也可以作为HTTP接口传参!

作者头像
程序员小义
发布2024-11-12 14:33:45
发布2024-11-12 14:33:45
18200
代码可运行
举报
文章被收录于专栏:小义思小义思
运行总次数:0
代码可运行

大家好,我是小义。在Java开发中,HTTP接口是前后端分离架构中不可或缺的一部分,我们经常需要通过接口来传递参数,以实现页面和服务器的数据交互。通常情况下,这些参数可能是字符串、数字或者布尔值等形式的数据,但其实,枚举值也可以作为HTTP接口传参。

首先定义一个枚举类。

代码语言:javascript
代码运行次数:0
复制
public enum UserStatus {
    ACTIVE("active"),
    INACTIVE("inactive");

    private String status;

    UserStatus(String status) {
        this.status = status;
    }

    public String getStatus() {
        return status;
    }

}

创建控制器。

代码语言:javascript
代码运行次数:0
复制
@RestController
@RequestMapping("/users")
public class UserController {

    @PostMapping("/{userId}/status")
    public String updateUserStatus(@PathVariable String userId,
                                  @RequestParam UserStatus status) {
        //业务逻辑
        userService.updateUserStatus(userId, status);
        return "User status updated to " + status.name();
    }
}

客户端调用。

代码语言:javascript
代码运行次数:0
复制
curl -X POST "http://localhost:8080/users/1/status?status=ACTIVE"

在这个示例中,我们定义了一个UserStatus枚举,它包含了用户可能的状态。在updateUserStatus方法中,我们通过@RequestParam注解接收用户状态。这样,我们就可以在接口调用时传递枚举值,而不是字符串。

为什么枚举值可以作为HTTP接口传参呢?其原因就在于,枚举在Java中本质上也是类,它们可以被序列化为字符串。在Spring框架中,@RequestParam会自动将字符串参数转换为对应的枚举值,前提是这些枚举值是公开的且在类中有定义。

当然,如果传参是json字符串对象,也可以按枚举值在类中的序数来传递。像ACTIVE在UserStatus中写在了第一位,那就可以用"0"来代替。

代码语言:javascript
代码运行次数:0
复制
curl -X POST "http://localhost:8080/users/1/status?status=0"

不过这种方法依赖于枚举值的顺序与序数的一致性,如果改变了枚举的顺序,可能会得到不正确的枚举值,不建议使用。

总结

使用枚举值作为HTTP接口的传参可以显著提高代码的可读性。当看到一个参数为Weekday.MONDAY时,显然比看到一个字符串"monday"更加直观和易于理解。另外由于枚举值是预定义的,这意味着它们具有有限且确定的取值范围。如果尝试传递一个不在枚举定义中的值,编译器就会报错,从而避免了运行时错误的发生。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-11-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员小义 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档