从后端获取枚举并在javascript中将其用作字符串

时间:2015-10-16 15:27:07

标签: javascript angularjs rest enums backend

今天我与一个java后端开发人员进行了一次相当热烈的讨论。我用jsangular做前端。他的休息服务给我发送了一个包含枚举的对象。我把它作为一个字符串,需要以角度网格显示。

这些枚举很容易解释。

我得到的例子: Person = {gender: "MAN", position: "IS_EMPLOYED"}

在视图中,我必须显示以下内容: man is employed

所以我用一种简单而通用的方式解决了它: Person.gender.toLowerCase () + ' ' + Person.position.toLowerCase ().replace ('_', ' ')

他发现了这个可怕的编程,并要求我用if else或switch制作一个mapper 所以:If(Person.gender==="MAN") return "man" Else if....

标签名称始终与枚举名称相同(仅小写和空格而不是下划线)

他横冲直撞,编码很糟糕,基本上是可怕的,也是对上帝的罪......

所以我的问题是这个糟糕/良好的做法(所以是个黑白故事)还是在某些情况下可以接受和可以辩护?

在我的手机上输入,因此我无法将代码示例放在正确的标签中。

3 个答案:

答案 0 :(得分:1)

创建客户端枚举映射可能是个更好的主意 - 然后只返回实际值。所以你可以:

var personTypes: {
    "1": "Is Employed",
    ..
}

然后简单地将1作为枚举发送回来并使用查找对象:

console.log("Person status: " + personTypes[Person.position]);

这样也可以更容易地显示类型列表 - 选择一个新类型,然后简单地发回枚举:

<select ng-model="personTypeEnum" ng-options="enum as type for (enum, type) in personTypes"></select>

答案 1 :(得分:1)

有几种方法可以看待这个:

映射更强大: 他说是应该有一个完整的映射功能是正确的。这允许您处理错误(即,如果您为position获得的响应是​​“香蕉”,您可能不应该只是将其丢弃)。当您可能使用严​​格的模式时,这在后端开发中尤为重要。

比例事项: 您的方法没有技术上错误。如果有少量条目或者用户群或应用程序范围很小,则可能无关紧要。它并不真正符合最佳实践,但它有效,如果这一切都很重要,那就足够了。虽然你应该始终追求最佳实践,但你需要牢记大局。

<强>效率: 一种方法可能比另一种更有效。差异可以忽略不计。在web dev中,速度是一个优先事项,如果两种方法都得到相同的结果,但速度要快一些,那就选择那个。

答案 2 :(得分:0)

使用打印对象检入控制台。 例如,如果object是person,那么如果您将此对象呈现为json,则gender(enum)将为

{"success":true,"person":[{"class":"person","id":26,"comment":null,"gender":{"enumType":"com.project.Person$Gender","name":"MEN"},

所以你可以打印person.gender.name,这将给出MEN