天天看點

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]