Como testar o OffsetDateTime no Postman

Então Lucas: consegui fazer cadasstrar e listar: o problema agora é o seguinte: adicionar a lista de nomes no selectbox: a lista está vindo assim:

["Pompeo Cesar da Silva","Aristoteles Floriano Canani","Arquimedes Medievali","Confucio Tanaka"] 

estou listando no método:

 RetornaFuncionarios(){
  this.funcionarioService.getNomeFuncionarios().subscribe(data=> {this.nomeDosFuncionarios=data;});
  console.log(this.funcionarioService);
  }

eu acho que tem haver com o formato do metodo:

this.http.get<String[]>(this.url)

e do atributo que recebe esse metoto:

nomeDosFuncionarios:String[];
  //nomeDosFuncionarios:String[] = ["Pompeo Cesar da Silva","maria","joao"];

Que está na componente:

import { ServiceService } from '../../Service/service.service';
import { FuncionarioService } from '../../Service/funcionario.service';
import { Atividade } from 'src/app/Modelo/Atividade';
import { Funcionario } from 'src/app/Modelo/Funcionario';
import { Observable } from 'rxjs';

@Component({
  selector: 'app-adicionar',
  templateUrl: './adicionar.component.html',
  styleUrls: ['./adicionar.component.css']
})
export class AdicionarComponent implements OnInit {

Vc não deveria está usando o nome do funcionário assim. O nome é um dado fraco para ser usado na identificação de algum registro. O melhor seria usar um ID. Assim, vc poderia retornar a lista de funcionários do endpoint e usar o ID como valor na combobox e o nome como label.

Na verdade eu seleciono o nome do funcionario no selectbox e envio para spring, no spring com o nome do funcionario eu busco u funcionário todo ai eu adiciono o funcionario na atividade e cadastro a atividade:

sabe uma solução para o selectbox receber esses nomes?

Se tiver 2 funcionarios com mesmo nome?

Tente assim:

<select [(ngModel)]="atividade.nomeSelecionado">
  <option *ngFor="let nome of nomesFuncionarios" [ngValue]="nome">{{nome}}</option>
</select>

Altere para usar formControl em vez de ngModel.

O meu está assim ó, quando eu uso o array preenchido ele funciona, quando uso o outro array que tras os nomes ele não funciona:

//nomeDosFuncionarios:String[];
  nomeDosFuncionarios:String[] = ["Pompeo Cesar da Silva","maria","joao"];

O meu selectbox está assim: você consegue usar as minhas variaveis pra ficar mais óbvio:

<select class="form-control" id="funcionario" formControlName="funcionario" style="background-color: lightblue;">
<option *ngFor="let funcionario of nomeDosFuncionarios" [ngValue]="funcionario">
    {{ funcionario}}
 </option>
 </select>

O array está sendo preenchido assim: por isso penso que tem erro entre <String[]> e String[] :

 RetornaFuncionarios(){
  this.funcionarioService.getNomeFuncionarios().subscribe(data=> {this.nomeDosFuncionarios=data;});
  console.log(this.funcionarioService);
  }

E desse jeito não tah funcionando? Da algum erro?

Quando uso o debaixo funciona, quando uso o de cima não

//nomeDosFuncionarios:String[];
  nomeDosFuncionarios:String[] = ["Pompeo Cesar da Silva","maria","joao"];

Onde vc está chamando a função RetornaFuncionarios da classe ServiceService?

O array está sendo preenchido assim: por isso penso que tem erro entre <String[]> e String[] :

 RetornaFuncionarios(){
  this.funcionarioService.getNomeFuncionarios().subscribe(data=> {this.nomeDosFuncionarios=data;});
  console.log(this.funcionarioService);
  }

Mas quem tah chamando RetornaFuncionarios? Ou RetornaFuncionarios é uma função que está declarada no próprio componente?

Está no componente:


import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { FormGroup, FormBuilder, Validators } from '@angular/forms';

import { ServiceService } from '../../Service/service.service';
import { FuncionarioService } from '../../Service/funcionario.service';
import { Atividade } from 'src/app/Modelo/Atividade';
import { Funcionario } from 'src/app/Modelo/Funcionario';
import { Observable } from 'rxjs';

@Component({
  selector: 'app-adicionar',
  templateUrl: './adicionar.component.html',
  styleUrls: ['./adicionar.component.css']
})
export class AdicionarComponent implements OnInit {

  nomeDosFuncionarios:String[];
  //nomeDosFuncionarios:String[] = ["Pompeo Cesar da Silva","maria","joao"];
  funcio:Funcionario;
  atividade:Atividade;  

  constructor(private funcionarioService: FuncionarioService, private formBuilder:FormBuilder, private service:ServiceService, private router: Router) { 
    this.RetornaFuncionarios();
    this.funcio = new Funcionario;
    this.funcio.id=1
    this.funcio.cpf='';
    this.funcio.nome='';
    this.funcio.cargo='';
  }

   formulario: any = FormGroup;

  ngOnInit(): void {

    this.formulario = this.formBuilder.group({
      descricao: [''],
      status: [''],
      prioridade: [''],
      funcionario: [''],
      dataPrevista: [new Date]
        });
  }

  RetornaFuncionarios(){
  this.funcionarioService.getNomeFuncionarios().subscribe(data=> {this.nomeDosFuncionarios=data;});
  console.log(this.funcionarioService);
  }

  OnSubmit(){
    this.funcio.nome = this.formulario.get('funcionario').value
     this.atividade = this.formulario.value;
     this.atividade.funcionario = this.funcio;
     console.log(this.atividade);
    this.service.createAtividade(this.atividade)
    .subscribe(data=>{alert("Se agrego com exito...!!!");
    this.router.navigate(["listar"]);
    console.log(this.atividade);
     this.formulario.reset(this.atividade);
    })
}

Mude a função para ficar assim:

RetornaFuncionarios() {
  this.funcionarioService.getNomeFuncionarios().subscribe(data => {
    console.log(data);
    this.nomeDosFuncionarios = data;
  });
}

E veja o que é impresso no console.

Não funcionou: selectbox vazio:

image

Se clicar no link ‘http:localhost://8080:funcionarios’: aparece

Ah rapaz, o problema é o CORS. Vc tem que permitir o backend receber requisições de outro dominio.

Por exemplo, o dominio http://localhost:8080 é diferente de http://localhost:3000.

Faça um teste, coloque a anotação @CrossOrigin no método do endpoint, e tente de novo.

Viu como é importante o console? Ele é uma ferramenta muito importante quando trabalhar no frontend.

Seria isso?

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';

import { Funcionario } from '../Modelo/Funcionario';

@Injectable({
  providedIn: 'root'
})
export class FuncionarioService {

  constructor(private http:HttpClient) { }

   url='http://localhost:8080/funcionarios/nomes'; 

   createAtividade(funcionario:Funcionario){
     return this.http.post<Funcionario>(this.url,funcionario);
   }
   
   @CrossOrigin
   getNomeFuncionarios(){
    return this.http.get<String[]>(this.url);
   }

   //getNomeFuncionarios(){
    //return this.http.get<String[]>(this.url);
  // }
}

Nâo. A anotação @CrossOrigin tem que ser colocada lah no projeto spring.

No controler está assim:

package com.petter.tasks.api.controller;

import java.util.List;

import javax.validation.Valid;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;

import com.petter.tasks.domain.exception.CadastroFuncionarioException;
import com.petter.tasks.domain.model.Atividade;
import com.petter.tasks.domain.model.Funcionario;
import com.petter.tasks.domain.service.AtividadeService;
import com.petter.tasks.domain.service.FuncionarioService;

import lombok.AllArgsConstructor;

@CrossOrigin(origins = "http://localhost:4200", maxAge = 3600)
@AllArgsConstructor
@RestController
@RequestMapping("/atividades")
public class AtividadeController {

	private AtividadeService as;
	
	//////////////////LISTA TODAS AS ATIVIDADES
	
	@GetMapping
	public List<Atividade> listar() {
		System.out.println("chegou aui");
		return as.listar();
	}
	```

Desse jeito acho que resolve. (poderia ser soh @CrossOrigin também)

Pelo que pesquisei acho que tem haver

com: import { Observable } from ‘rxjs’;