如何在scala中将查询参数中的字符串receive转换为enums对象?
因为据我所知,不可能将Enum作为查询参数来接收,所以如何正确地更改我获取到Enum对象的字符串 我的路线:如何在scala中将查询参数中的字符串receive转换为enums对象?,scala,enums,Scala,Enums,因为据我所知,不可能将Enum作为查询参数来接收,所以如何正确地更改我获取到Enum对象的字符串 我的路线: POST /goto controllers.goToAPlace(place: String) 我的枚举: object Place extends Enumeration { type Place = Value val Italy, United States, Rome = Value } 那么现在,当我在goToAPlace中获取它时,什么是将它转换为我的枚举的
POST /goto controllers.goToAPlace(place: String)
我的枚举:
object Place extends Enumeration {
type Place = Value
val Italy, United States, Rome = Value
}
那么现在,当我在goToAPlace
中获取它时,什么是将它转换为我的枚举的正确方法
我希望能够做到以下几点:
def goToAPlace(place: String) = {
if (place.isEqual(Italy)){
//do something
}
}
感谢Scala中的,如果您只需要采取不同的操作,可以使用
match
语句:
place match {
case "Italy" => // do something
case "France" => // do something else
case _ => // all others
}
如果收到的字符串不是有效的Scala标识符,也可以使用Java枚举。这将为您提供一个地图
。您可以使用映射将place:String
转换为您的枚举:
import java.util.Collections;
import java.util.Map;
import java.util.HashMap;
public enum WithFrom {
TWO("one plus 1"), SIX("two plus 4");
WithFrom(String expr) {
this.expr = expr;
}
private final String expr;
public static final Map<String, WithFrom> fromValue = Collections
.unmodifiableMap(new HashMap<String, WithFrom>() {
private static final long serialVersionUID = 7205142682214758287L;
{
for (WithFrom wf : WithFrom.values()) {
put(wf.expr, wf);
}
}
});
}
import java.util.Collections;
导入java.util.Map;
导入java.util.HashMap;
公共枚举WithFrom{
二(“一加一”)、六(“二加四”);
WithFrom(字符串表达式){
this.expr=expr;
}
私有最终字符串表达式;
公共静态最终映射fromValue=集合
.unmodifiableMap(新的HashMap(){
私有静态最终长serialVersionUID=7205142682214758287L;
{
for(WithFrom wf:WithFrom.values()){
put(wf.expr,wf);
}
}
});
}
捷径是:
Place.withName(place) == Italy
请注意,如果在枚举中找不到该值,上述代码将引发异常。以下是使用选项处理无效输入的更安全方法:
Place.values.find(_.toString == place).contains(Italy)
如果您确定名称与枚举中的一个值匹配,或者如果您确实希望引发异常,请首先使用
Place.withName(Place)
将字符串转换为枚举,然后对其进行模式匹配:Place.withName(Place)match{case意大利=>…}
,请记住导入必要的内容。事实上,您从查询参数中获取字符串在这里是不相关的,因此排除它会简单得多,但是您的问题会减少到,您还可以在Scala文档中找到问题的答案。这并不是所问的问题。使用Java枚举在这里不是一个选项。显然,PO希望利用ScalaEnumeration
s,简单地将字符串解析为Enumeration
我提供了match
语句,因为它可以做他想要的事情,而不必转换为enum。我还提供了一个Java枚举,因为它可以用于他接收的字符串不是有效的Scala标识符的情况。