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. Unity 3D还原Scene场景、市面多数游戏视角高度自定义、第三人称视角分离功能:平移、拖动、看向中心等

    Unity视角的高度自定义 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享. ...

  2. Js中的判空

    1.JS 中判断 undefined JavaScript 中有两个特殊数据类型:undefined 和 null var test= undefined; if (typeof(test) == u ...

  3. iOS常用的代码块整理

    strong @property (nonatomic,strong) <#Class#> *<#object#>; weak @property (nonatomic,wea ...

  4. SEO : 建站注意

    1.url格式.尽可能的短一些,实践证明,较短的url格式还是比较利于搜索引擎收录的. 2.网站前台要纯静态.虽然搜索引擎对静态页面和动态页面并没有本质上的差别对待,但是实践告诉我们静态页面对服务器的 ...

  5. 简易计算器的java实现

    伪代码 public class MainTestwei { 定义两个数组,List<Double> number和 List<Character>calculation分别用 ...

  6. SQL经常使用的一些词

    sp_helptext: 例:exec sp_helptext proc_name(查看存储过程的定义) sp_rename: 例:exec sp_rename 'proc_name1','proc_ ...

  7. golang-test-tool-gotests

    gotests介绍 gotests是一个Golang命令行工具 ,让Go测试变得容易.它根据目标源文件的函数和方法签名生成表驱动的测试(TDD).任何测试文件中新的依赖都会被自动倒入 Demo 下面是 ...

  8. WPS之word文档处理(持续更新)

    1.word文档行与行之间

  9. JDBC封装

    在模拟servlet调用dao中,我们发现在dao的实现类中有许多重复代码,我们可以将其封装起来. 步骤: 一. 创建一个类 DBUtil 1加载驱动和建立链接的代码 完全一样 加载驱动写到静态代码快 ...

  10. 使用distillery&&docker 部署phoenix 应用

      distillery 发布了2.0 了,有好多的新的功能 config prodiver 进行环境变量的配置 appup tansforms 插件系统,方便在release 构建的时候进行修改 m ...