Javascript将0解释为null

时间:2018-01-08 11:36:48

标签: javascript spring angular enums

我有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解释为空值吗?感谢。

3 个答案:

答案 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)

无论theThingThatYouAreTalkingAbout0还是null(或空字符串,或undefined),其行为方式都相同。

答案 2 :(得分:0)

在我的情况下,问题是行

@JsonFormat(shape = JsonFormat.Shape.ARRAY)

此强制将枚举映射为数组,因此端点将返回枚举内元素的位置,而不是其id。

  1. 我可以用

    替换该行

    @JsonFormat(shape = JsonFormat.Shape.OBJECT)

  2. 在这种情况下,端点将返回包含元素id的o json对象,即{"id":1}

    1. 我可以完全删除注释,在这种情况下,端点将返回元素ID,即"DA_PAGARE"
    2. 这两种解决方案现在都适合我。 0 -> null隐式转换的javascript问题仍然存在。