天天看点

java string 转枚举_【枚举类型】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;

public class StringToBaseEnumConverterFactory implements ConverterFactory {

@Override

public Converter getConverter(Class targetType) {

if (!targetType.isEnum()) {

throw new UnsupportedOperationException("只支持转换到枚举类型");

}

return new StringToBaseEnumConverter(targetType);

}

private class StringToBaseEnumConverter implements Converter {

private final Class enumType;

public StringToBaseEnumConverter(Class 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;

@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]