ENUM do JAVA carregando no Angular

Tenho este enum no JAVA.

package br.com.netsoft.desif.enuns;

public enum TipoArquivoEnum {

	ESTRUTURA("Estrutura", "ESTRUTURA"), LOGICA("Lógica", "LOGICA"), FINALIZADO(
			"Finalizado", "FINALIZADO");

	private String descricao;
	private String codigo;

	private TipoArquivoEnum(String descricao, String codigo) {
		this.descricao = descricao;
		this.codigo = codigo;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	@Override
	public String toString() {
		return descricao;
	}

	public String getCodigo() {
		return codigo;
	}

	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}
}

Como fazer que o Angular o carregue ?

O que você quer dizer com carregue?

Tipo o Angular, deve buscar este enum e mostrar na tela.

Assim quando o usuario escolher um dos seus valores o JAVA já sabe que é o ENUM ESTRUTURA, e salva no banco de dados.

Que ele mostre reinderia a tela e mostra o componente assim:

<label>Status da importação</label> <md-select ng-model="filtro.status"> 
<md-option></md-option>
<md-option value="NAO_PROCESSADA"> Não processada </md-option>
<md-option value="ANALISANDO_A_ESTRUTURA"> Analisando estrutura </md-option>
<md-option value="ESTRUTURA_ANALIZADA"> Estrutura analisada </md-option>
<md-option value="PROCESSO_AGENDADO"> Processo agendado </md-option>
<md-option value="PROCESSANDO"> Processando </md-option>
<md-option value="DELETADA"> Deletada </md-option>
<md-option value="PROCESSADA"> Processada </md-option>
<md-option value="ERROS_NA_ESTRUTURA"> Erros na estrutura </md-option>
<md-option value="ERROS_LOGICO"> Erros lógicos </md-option>
<md-option value="PROCESSANDO_ED070"> Processando ED070 </md-option>
<md-option value="PROCESSANDO_EM066"> Processando EM066 </md-option>
<md-option value="PROCESSANDO_EM067"> Processando EM067 </md-option>
<md-option value="PROCESSANDO_EM068"> Processando EM068 </md-option>
<md-option value="PROCESSANDO_EM069"> Processando EM069 </md-option>
</md-select>

Assim o quando eu salvar, o Java não deve entender este valor como String e sim como o ENUM TipoArquivoEnum.

Entendeu ?

Mas, se você enviar, no JSON, algo assim

{
    "status"  : "ESTRUTURA_ANALIZADA"
}

O java, teoricamente, deveria entender como sendo enum, diretamente.

De qualquer maneira, todo enum possui um método values, que retorna um vetor contendo todos os elementos do enum.
Creio que você deva expor um serviço onde você possa retornar esse vetor ou, se quiser, transformar o mesmo em uma List e pronto.

Mas o java entender que o valor é uma String e não Enum.

Como devo proceder para que o java entende que este valor é do ENUM, automático sem ser por codificação, para cada ENUM existente ?

Todas as vezes que precisei usar enum em um JSON, nunca precisei fazer nada além de enviar o mesmo com seu nome, o resto, o próprio Jersey (ou a implementação em questão) deve resolver.
Você já testou?
Aconteceu algum erro?

Entendi. Não. Só perguntei antes de fazer, porque em um sistema HTML com Thymeleaf, dava erro.

Vou testar.

Estranho, nunca tive problemas.

Não aparece na lista do html, mas no JAVA o retorno está correto.

Console do navegador:

(14) ["NAO_PROCESSADA", "ANALISANDO_A_ESTRUTURA", "ESTRUTURA_ANALIZADA", "PROCESSO_AGENDADO", "PROCESSANDO", "DELETADA", "PROCESSADA", "ERROS_NA_ESTRUTURA", "ERROS_LOGICO", "PROCESSANDO_ED070", "PROCESSANDO_EM066", "PROCESSANDO_EM067", "PROCESSANDO_EM068", "PROCESSANDO_EM069"]
0
:
"NAO_PROCESSADA"
1
:
"ANALISANDO_A_ESTRUTURA"
2
:
"ESTRUTURA_ANALIZADA"
3
:
"PROCESSO_AGENDADO"
4
:
"PROCESSANDO"
5
:
"DELETADA"
6
:
"PROCESSADA"
7
:
"ERROS_NA_ESTRUTURA"
8
:
"ERROS_LOGICO"
9
:
"PROCESSANDO_ED070"
10
:
"PROCESSANDO_EM066"
11
:
"PROCESSANDO_EM067"
12
:
"PROCESSANDO_EM068"
13
:
"PROCESSANDO_EM069"
length
:
14
__proto__
:
Array(0)

Metodo no java para preencher o enum

@PostMapping(value = "/arquivoImportadoRecurso/statusEnum", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)

public RetornoJackson statusEnum() {
RetornoJackson retorno = new RetornoJackson();
retorno.setTipo(TipoRetornoMensagemEnum.SUCESSO);
List<?> lista = new ArrayList(Arrays.asList(StatusProcessoImportacaoEnum.values()));
retorno.setList(lista);
return retorno;
}

O retorno no angular deveria ser assim:

NAO_PROCESSADA : Não processada

e não assim, como está

0 : “NAO_PROCESSADA”

O errodeve estar aqui:

<md-select ng-model="filtro.status"> 
<md-option></md-option>
<md-option ng-repeat="status in todoStatus" value="{{ status }}"> {{ status.descricao }} </md-option>
</md-select>

Temos duas coisas, o modo como o angular trata os enums é diferente.
Neste caso, coloque

{{ status.descricao }}

Também para o valor. Creio que resolve essa parte dos valores.
A questão do que será exibido, isso é um pouco mais complexo. Talvez criar um map ajude.

Fica vazio:

status

html construído:

<label>Status da importação</label> <md-select ng-model="filtro.status"> <md-option></md-option>
<md-option ng-repeat="status in todoStatus" value="{{ status.descricao }}">{{ status.descricao }} </md-option> </md-select>

É gerado assim:

<md-option ng-repeat="status in todoStatus" value="" tabindex="0" class="ng-scope" style=""><div class="md-text ng-binding"> </div></md-option>

Então ele não encontrou o elemento todoStatus.
Precisa rever isso

Está assim: O que pode ser ?

Não aparece na lista do html, mas no JAVA o retorno está correto.

Console do navegador:

(14) ["NAO_PROCESSADA", "ANALISANDO_A_ESTRUTURA", "ESTRUTURA_ANALIZADA", "PROCESSO_AGENDADO", "PROCESSANDO", "DELETADA", "PROCESSADA", "ERROS_NA_ESTRUTURA", "ERROS_LOGICO", "PROCESSANDO_ED070", "PROCESSANDO_EM066", "PROCESSANDO_EM067", "PROCESSANDO_EM068", "PROCESSANDO_EM069"]
0
:
"NAO_PROCESSADA"
1
:
"ANALISANDO_A_ESTRUTURA"
2
:
"ESTRUTURA_ANALIZADA"
3
:
"PROCESSO_AGENDADO"
4
:
"PROCESSANDO"
5
:
"DELETADA"
6
:
"PROCESSADA"
7
:
"ERROS_NA_ESTRUTURA"
8
:
"ERROS_LOGICO"
9
:
"PROCESSANDO_ED070"
10
:
"PROCESSANDO_EM066"
11
:
"PROCESSANDO_EM067"
12
:
"PROCESSANDO_EM068"
13
:
"PROCESSANDO_EM069"
length
:
14
__proto__
:
Array(0)

Metodo no java para preencher o enum

@PostMapping(value = "/arquivoImportadoRecurso/statusEnum", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public RetornoJackson statusEnum() {
	RetornoJackson retorno = new RetornoJackson();
	retorno.setTipo(TipoRetornoMensagemEnum.SUCESSO);
	List<?> lista = new ArrayList<StatusProcessoImportacaoEnum>(Arrays.asList(StatusProcessoImportacaoEnum.values()));
	retorno.setList(lista);
	return retorno;
}

O retorno no angular deveria ser assim:

NAO_PROCESSADA : Não processada

e não assim, como está

0 : “NAO_PROCESSADA”

O errodeve estar aqui:

<md-select ng-model="filtro.status"> 
<md-option></md-option>
<md-option ng-repeat="status in todoStatus" value="{{ status }}"> {{ status.descricao }} </md-option>
</md-select>

O que acontece, o angular está entendendo estes elementos como enum.
A maneira que um enum funciona no angular é um pouco peculiar (para não dizer bizarra).
Este vídeo dá uma ideia de como, mais ou menos funciona.