【枚举类型】Restful API请求--转换String为枚举类型
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]
【枚举类型】Restful API请求--转换String为枚举类型的更多相关文章
- httpclient连接池在ES Restful API请求中的应用
package com.wm.utils; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http ...
- kylin 使用RESTful API 请求
目前根据Kylin的官方文档介绍,Kylin的认证是basic authentication,加密算法是Base64,在POST的header进行用户认证我使用的用户和密码是(格式:username: ...
- 使用 SpringBoot 构建一个RESTful API
目录 背景 创建 SpringBoot 项目/模块 SpringBoot pom.xml api pom.xml 创建 RESTful API 应用 @SpringBootApplication @C ...
- python之restful api(flask)获取数据
需要用到谷歌浏览器的扩展程序 Advanced Rest Client进行模拟请求 1.直接上代码 from flask import Flask from flask import request ...
- SpringBoot实现JWT保护前后端分离RESTful API
通常情况下, 将api直接暴露出来是非常危险的. 每一个api呼叫, 用户都应该附上额外的信息, 以供我们认证和授权. 而JWT是一种既能满足这样需求, 而又简单安全便捷的方法. 前端login获取J ...
- Openstack创建虚拟机 Restful api和RPC调用
Horizon前台界面用于接受用户的输入或动作(action),然后将这些参数构造成RESTful API(https://developer.openstack.org/api-ref/comput ...
- golang interface类型转string等其他类型
inter 是interface类型,转化为string类型是: str := inter .(string) 转为其他类型也类似
- 03.枚举和string以及int类型之间的转换
练习1: 将枚举类型强转成int类型 namespace _04.枚举类型的练习01 { //声明一个QQState类型的枚举 public enum QQState { OnLine, OffL ...
- 使用WebApiClient请求和管理Restful Api
前言 本篇文章的内容是WebApiClient应用说明篇,如果你没有了解过WebApiClient,可以先阅读以下相关文章: WebApi client 的面向切面编程 我来给.Net设计一款Http ...
随机推荐
- C# 后台获取API接口数据
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net ...
- 20165313 《Java程序设计》第八周学习总结
教材学习总结 线程常用方法 1.start() 2.run()定义线程线程对象被调度之后所执行的操作 3.sleep(int millsecond),必须在try-catch语句块中调用sleep方法 ...
- 在Java中,以下关于方法重载和方法重写描述正确的是?
public class TTTTT extends SuperC{ public String get(){ return null; } } class SuperC{ Object get(){ ...
- node学习笔记之io.sockets
socket.get和socket.set函数已经失效,代码修改如下所示: 服务器端: var httpd = require('http').createServer(handler); var i ...
- SQLite数据库下载
一:SQLite简介 SQLite是一种嵌入式数据库,它的数据库就是一个文件.体积很小,经常被集成到各种应用程序中,甚至在iOS和Android的App中都可以集成. 要操作关系数据库,首先需要连接到 ...
- centos7升级自带的php5.4版本到php5.6
history命令历史 8 yum provides php #自带的只有5.4版本 9 rpm -Uvh https://mirror.webtatic.com/yum/el7/epel-relea ...
- sqler sql 转rest api 源码解析(四)macro 的执行
macro 说明 macro 是sqler 的核心,当前的处理流程为授权处理,数据校验,依赖执行(include),聚合处理,数据转换 处理,sql 执行以及sql 参数绑定 授权处理 这个是通过go ...
- php创建桌面快捷方式实现方法
http://blog.csdn.net/fdipzone/article/details/50423613
- Python列表生成器
本篇将介绍python生成器,更多内容请参考:python学习指南 前言 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不 ...
- 编写一个函数实现n^k,使用递归实现
思路:例如2的3次方.可以分解为2乘2的2次方,而2的2次方又可以分解为2乘2的以此方法,以此类推. #include<stdio.h> int Find_num(int n,int k) ...