我是Play框架的新手,无法使用Enum字段Value将POST请求主体参数转换为Enum类型。我将Enum Fruits定义为:
@AllArgsConstructor
public enum Fruits {
APPLE("apple"),
BANANA("banana"),
KIWI("kiwi"),
DRAGON_FRUIT("dragonFruit");
private final String fruitName;
private static final Map<String, Fruits> fruitsByFruitName;
static {
fruitsByFruitName = new HashMap<>();
fruitsByFruitName.put("apple", APPLE);
fruitsByFruitName.put("banana", BANANA);
fruitsByFruitName.put("kiwi", KIWI);
fruitsByFruitName.put("dragonFruit", DRAGON_FRUIT);
}
public static Fruits fromFruitName(String fruitName) throws InvalidEnumException {
if(fruitsByFruitName.contains(fruitName)) return fruitsByFruitName.get(fruitName);
else throw new InvalidEnumException("message");
}
}
我的模型类为:
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MyReqBody {
private Fruit favFruit;
}
我的请求正文由json组成,正文为:
{
"favFruit": "banana"
}
我正在尝试使用绑定参数
Form<MyReqBody> request = Form.form(MyReqBody.class);
request = request.bindFromRequest();
投标后我无法填充MyReqBody
的favFruit
字段,它为空。如果我发送";BANANA";在请求体中而不是";香蕉";,即确切的枚举名称。我如何告诉play框架使用具有枚举字段fruitName
而不是枚举名称的比较请求体数据,或者我如何告诉播放在竞标Fruits
枚举类型时使用fromFruitName
?
尝试使用String#toUpperCase()
方法
if(fruitsByFruitName.contains(fruitName.toUpperCase())) {
return fruitsByFruitName.get(fruitName.toUpperCase());
}