IBaseEnum.java

public interface IBaseEnum {
public String getName();
}

FuncEnum.java

import com.ssslinppp.enumConvert.IBaseEnum;

public enum FuncEnum implements IBaseEnum {
AVG("avg", "func-avg"),
MAX("max", "func-max"),
MIN("min", "func-min"),
SUM("sum", "func-sum"),
LAST("last", "func-last"); private String name;
private String desc; FuncEnum(String name, String desc) {
this.name = name;
this.desc = desc;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getDesc() {
return desc;
} public void setDesc(String desc) {
this.desc = desc;
}
}

StringToBaseEnumConverterFactory.java

package com.ssslinppp.enumConvert;

import org.springframework.core.convert.converter.Converter;
import org.springframework.core.convert.converter.ConverterFactory; /**
* Description: 将String转换为枚举类型
*/
public class StringToBaseEnumConverterFactory implements ConverterFactory<String, IBaseEnum> {
@Override
public <T extends IBaseEnum> Converter<String, T> getConverter(Class<T> targetType) {
if (!targetType.isEnum()) {
throw new UnsupportedOperationException("只支持转换到枚举类型");
}
return new StringToBaseEnumConverter(targetType);
} private class StringToBaseEnumConverter<T extends IBaseEnum> implements Converter<String, T> {
private final Class<T> enumType; public StringToBaseEnumConverter(Class<T> enumType) {
this.enumType = enumType;
} @Override
public T convert(String s) {
for (T t : enumType.getEnumConstants()) {
if (s.equals(t.getName())) {
return t;
}
}
return null;
}
}
}

注册自定义的ConverterFactory

MyWebAppConfigurer.java

package com.ssslinppp.configs;

import com.ssslinppp.enumConvert.StringToBaseEnumConverterFactory;
import org.springframework.context.annotation.Configuration;
import org.springframework.format.FormatterRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; /**
* Description:注册自定义的ConverterFactory
*/
@Configuration
public class MyWebAppConfigurer extends WebMvcConfigurerAdapter {
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverterFactory(new StringToBaseEnumConverterFactory());
}
}

测试

EnumModel.java

package com.ssslinppp.model;

import com.ssslinppp.enumConvert.baseEnumImpl.FuncEnum;

public class EnumModel {
private FuncEnum funcEnum; public FuncEnum getFuncEnum() {
return funcEnum;
} public void setFuncEnum(FuncEnum funcEnum) {
this.funcEnum = funcEnum;
}
}

同时测试@RequestBody和@RequestParam

EnumController.java 测试类

package com.ssslinppp.controller;

import com.ssslinppp.enumConvert.baseEnumImpl.FuncEnum;
import com.ssslinppp.model.EnumModel;
import org.springframework.web.bind.annotation.*; @RestController
@RequestMapping("/enum")
public class EnumController { @RequestMapping("/print")
public String printEnums(@RequestBody EnumModel enumModel, @RequestParam("pathEnum") FuncEnum pathEnum) {
System.out.println("[" + enumModel.getFuncEnum().getName() + ":" + enumModel.getFuncEnum().getDesc() + "]");
System.out.println("[" + pathEnum.getName() + ":" + pathEnum.getDesc() + "]");
return "[" + pathEnum.getName() + ":" + pathEnum.getDesc() + "]";
}
}

请求URL

localhost:8080/enum/print?pathEnum=max
method: post
mediaType:application 请求体:
{
"funcEnum": "AVG"
}

测试结果(output):

[avg:func-avg]
[max:func-max]

参考:

Demo1

Spring Boot绑定枚举类型参数

【枚举类型】Restful API请求--转换String为枚举类型的更多相关文章

  1. httpclient连接池在ES Restful API请求中的应用

    package com.wm.utils; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http ...

  2. kylin 使用RESTful API 请求

    目前根据Kylin的官方文档介绍,Kylin的认证是basic authentication,加密算法是Base64,在POST的header进行用户认证我使用的用户和密码是(格式:username: ...

  3. 使用 SpringBoot 构建一个RESTful API

    目录 背景 创建 SpringBoot 项目/模块 SpringBoot pom.xml api pom.xml 创建 RESTful API 应用 @SpringBootApplication @C ...

  4. python之restful api(flask)获取数据

    需要用到谷歌浏览器的扩展程序 Advanced Rest Client进行模拟请求 1.直接上代码 from flask import Flask from flask import request ...

  5. SpringBoot实现JWT保护前后端分离RESTful API

    通常情况下, 将api直接暴露出来是非常危险的. 每一个api呼叫, 用户都应该附上额外的信息, 以供我们认证和授权. 而JWT是一种既能满足这样需求, 而又简单安全便捷的方法. 前端login获取J ...

  6. Openstack创建虚拟机 Restful api和RPC调用

    Horizon前台界面用于接受用户的输入或动作(action),然后将这些参数构造成RESTful API(https://developer.openstack.org/api-ref/comput ...

  7. golang interface类型转string等其他类型

    inter 是interface类型,转化为string类型是: str := inter .(string) 转为其他类型也类似

  8. 03.枚举和string以及int类型之间的转换

    练习1:   将枚举类型强转成int类型 namespace _04.枚举类型的练习01 { //声明一个QQState类型的枚举 public enum QQState { OnLine, OffL ...

  9. 使用WebApiClient请求和管理Restful Api

    前言 本篇文章的内容是WebApiClient应用说明篇,如果你没有了解过WebApiClient,可以先阅读以下相关文章: WebApi client 的面向切面编程 我来给.Net设计一款Http ...

随机推荐

  1. 2018牛客27---D---愤怒: (有关子序列的dp问题)

    链接:https://www.nowcoder.com/acm/contest/188/D来源:牛客网 题目描述 小w很生气 小w有一个长为n的括号序列 愤怒小w想把这个括号序列分为两个括号序列 小w ...

  2. c标签取数组中的对象值的2种方法

    1:循环遍历 <c:forEach items="${partsDeltailsList}" var="var" varStatus="vs&q ...

  3. currentStyle&getComputedStyle获取属性

    方法如下: function getStyle(obj,attr){ if(obj.currentStyle){ return obj.currentStyle[attr]; // IE 中的方法 } ...

  4. Django--路由控制 ——URL反向解析

    Django--路由控制 本文目录 一 Django中路由的作用 二 简单的路由配置 三 有名分组 四 路由分发 五 反向解析 六 名称空间 七 django2.0版的path 回到目录 一 Djan ...

  5. springMvc前后台传值各种情况

    本文转载至:https://blog.csdn.net/pangliang_csdn/article/details/52486787 以后自述...

  6. 【BZOJ1878】【SDOI2009】 HH的项链

    莫队模板题,比较简单 原题: HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH不断地收集新的贝壳,因此, 他的 ...

  7. CH3B04 Xiao 9*大战朱最学

    题意 3B04 Xiao 9*大战朱最学 0x3B「数学知识」练习 背景 Xiao 9*.朱最学.小全同属LOI,朱某某同学由于学习认真得到了小全的仰慕~~送其外号---朱最学.最学想:神牛我当不成难 ...

  8. MySQL Profiling--常用命令

    ##=====================================## ## 查看PROFILING是否开启 SELECT @@profiling ## 开始会话级别PROFILING # ...

  9. 07机器学习实战k-means

    K-Means原理初探 K-Means算法的思想很简单,对于给定的样本集,按照样本之间的距离大小,将样本集划分为K个簇.让簇内的点尽量紧密的连在一起,而让簇间的距离尽量的大. 如果我们想直接求上式的最 ...

  10. 昨天办了一张地铁卡,我想到一个app

    如果成都开通 扫 二维码 做地铁.地铁是距离收费的,如果我们有一个平台,搜集所有用户的 入站 和出站二维码,然后重新分配,那么每个用户就只用 出 2块钱每次的最低消费了.哈哈............. ...