我有spring
个端点,返回名为Enum
的{{1}}:
后端枚举
StatoPagamentoEnum
后端端点
@JsonFormat(shape = JsonFormat.Shape.ARRAY)
public enum StatoPagamentoEnum {
DA_PAGARE(0),
PARZIALMENTE_PAGATA(1),
PAGATA(2);
private int id;
private StatoPagamentoEnum(int id) {this.id = id;}
public int getId() {return id;}
}
此端点由角度服务调用,该服务也映射public @ResponseBody MyEnum getStatoPagamento(){
StatoPagamentoEnum statoPagamento = myMethod();
return statoPagamento;
}
:
前端枚举
Enum
前端呼叫
export enum StatoPagamentoEnum {
DA_PAGARE = 0,
PARZIALMENTE_PAGATA = 1,
PAGATA = 2
}
除非我尝试读取id为0的枚举值,否则一切正常;在这种情况下,角度服务似乎将0值读为null。可能getStatoPagamento(idRichiesta: number): Promise<StatoPagamentoEnum> {
const url = ...;
return this.http.get<StatoPagamentoEnum>(url).toPromise();
}
将0解释为空值吗?感谢。
答案 0 :(得分:0)
javascript中的0被视为null
,您可以尝试声明这样的枚举:
export enum StatoPagamentoEnum {
DA_PAGARE = <number>0,
PARZIALMENTE_PAGATA = <number>1,
PAGATA = <number>2
}
答案 1 :(得分:0)
0
在JS中是一个虚假的价值,因此,您所谈论的Angular服务的每一次机会都会在某处看起来像是
if(!theThingThatYouAreTalkingAbout)
无论theThingThatYouAreTalkingAbout
是0
还是null
(或空字符串,或undefined
),其行为方式都相同。
答案 2 :(得分:0)
在我的情况下,问题是行
@JsonFormat(shape = JsonFormat.Shape.ARRAY)
此强制将枚举映射为数组,因此端点将返回枚举内元素的位置,而不是其id。
我可以用
替换该行@JsonFormat(shape = JsonFormat.Shape.OBJECT)
在这种情况下,端点将返回包含元素id的o json对象,即{"id":1}
"DA_PAGARE"
这两种解决方案现在都适合我。 0 -> null
隐式转换的javascript问题仍然存在。