Como testar o OffsetDateTime no Postman

O ultimo atributo de atividade é um funcionario, que tem id, nome e cpf: nesse caso o que vem do selectbox é uma string, isso da um erro: como posso dar um system.outprintln() e visualizae esses dados: estou usando o visual studio code?

onSubmit(){
    //let funcionario =new Funcionario();
    //this.funcionario.id=1;
    let atividade = new Atividade();
    this.atividade.funcionario.id=1;

     //this.funcionario.id=1;
     //this.funcionario.nome = this.formulario.controls.funcionario.value;
     //this.atividade.funcionario = this.funcionario;
     this.atividade.descricao = this.formulario.controls.descricao.value;
     this.atividade.status = this.formulario.controls.status.value;
     this.atividade.prioridade = this.formulario.controls.prioridade.value;
     this.atividade.funcionario.nome = this.formulario.controls.funcionario.value;
     // this.atividade.funcionario.id=1;*/

     //this.atividade.funcionario.id = 1;
     //this.atividade = this.formulario.value;
     //this.atividade.funcionario = this.funcionario;
     this.service.createAtividade(this.atividade)
    .subscribe(data=>{alert("Se agrego com exito...!!!");
    this.router.navigate(["listar"]);
    console.warn(this.formulario.value);
     //this.formAtividade.reset(this.atividade);
    })```

Tem que usar o console.log e ver no console do navegador.

Nesse caso, vc pode passar apenas o id do funcionário na requisição é tratar isso no backend (por exemplo, recuperando o funcionário do banco usando esse ID recebido).

Não consegui o front-end: vou voltar para postman e tentar inserir a data

Aquela data que você me passou preci de aspas simples ou duplas?

Consegui cadastrar as datas o back-end, esta perfeito

Pelo postman ou pela tela da aplicação?

pelo postmam!

Estou tendo problema na interface com com a tag: [formGroup]: a unica forma de recuperar uma atividade do html abaixo e enviar para component é através dessas tag angular, ou tem outra forma?


<div class="container col-md-10">
    <div class="card">
        <div class="card-header">
            <h4>Cadastrar Atividades</h4>
        </div>
        <div class="card-body">
            <form action="" [formGroup]="formulario">         
                 <div class="form-row"> 
                    <div class="form-group">     
                     <label for="">DESCRIÇÃO</label>
                          <input id="descricao" type="text" class="form-control" style="background-color: lightblue;">
                     </div>
                <br>
                <br>
                     <div class="form-group">
                         <label for="selectStatus">STATUS</label>
                         <select class="form-control" id="status" style="background-color: lightblue;">
                             <option selected>SELECIONE</option>
                             <option>AGENDADA</option>
                             <option>EM ANDAMENTO</option>
                             <option>CONCLUIDA</option>
                             </select>
                     </div>
                <br>
                <br>

                       <div class="form-group">
                           <label for="selectPrioridade">PRIORIDADE</label>           
                           <select class="form-control" id="prioridade" style="background-color: lightblue;">
                                <option selected>SELECIONE</option>
                                <option>ALTA</option>
                                <option>MEDIA</option>
                                <option>BAIXA</option>
                            </select>
                       </div>
                <br>
                <br>
                       <div class="form-group">
                            <label for="selectFuncionario">FUNCIONÁRIO</label>
                            <select class="form-control" id="funcionario" style="background-color: lightblue;">
                                   <option selected>SELECIONE</option>
                                   <option>Pompeo Cesar da Silva</option>
                                   <option>Alexandrovina</option>
                                   <option>Catarina</option>
                            </select>
                        </div>
                <br>
                <br>
                <div class="form-group">
                        <label for="dataPrevista">DATA PREVISTA</label>
                             <input type="date" id="dataPrevista" value="2018-03-17 00:00:"
                             placeholder="yyyy-MM-dd hh:mm" min="2013-01-01" max="2030-12-31" required  style="background-color: lightblue;"/>
                        </div>
                <div class="botao">
                    <button type="submit" class="btn btn-primary">Cadastrar</button>
                    <!--<button (click)="Adicionar(atividade)" class="btn btn-danger">Cadastrar</button>-->
               </div>
            </div>
            </form>
        </div>
    </div>
</div>

Como tinha postado, o angular te fornece 2 formas de tratar um form (dê uma lida no link que mandei antes). Dessa forma que vc fez é usando formGroup junto com formControl para cada item do formulário. A outra forma é usando o ngModel. Para seu caso, acho que o ngModel será mais simples de resolver seu problema.

Supondo que tenha um campo que preencha a descrição da atividade:

<input type="text" [(ngModel)]="atividade.descricao" />

As teg consegui dominar!

Agora surgiu uma ambiguidade do controler: como se resolve esse mapeamento: Preciso preencher o selectbox com nome dos funcionarios: para cadadastrar quem fez a atividade?



	@GetMapping
	public List<Funcionario> listar() {
		return fs.listar();
	}
	
	@GetMapping
	public List<String> getListNameFuncionarios(){
		return fs.getListNameFuncionarios();
	}```

Só uma observação: o correto é tag, e não teg.

Sobre o controller, vc pode ter apenas o que retorna a lista de Funcionario, pois vc poderá obter a propriedade nome de cada elemento retornado.

Agora, se vc realmente quiser ter um que retorne somente os nomes, vc deve definir uma URL diferente, ex.:

@GetMapping("/nomes")
public List<String> getListNameFuncionarios(){
	return fs.getListNameFuncionarios();
}

Verdade obrigado!

Nesse caso, referente ao serviço: como defino ServiceService, da para criar mais de um url, ou tem que criar outra classe de serviços:

export class ServiceService {

  constructor(private http:HttpClient) { }

   url='http://localhost:8080/atividades'; 

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

   getAtividades(){
     return this.http.get<Atividade[]>(this.url);
   }```

Eu gosto de separar por escopo. Criaria um AtividadeService e um FuncionarioService (sem falar que ServiceService é um nome bem estranho).

export class AtividadeService {

  url = 'http://localhost:8080/atividades';

  constructor(private http:HttpClient) { }

  getAtividades(){
    return this.http.get<Atividade[]>(this.url);
  }
}
export class FuncionarioService {

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

  constructor(private http:HttpClient) { }

  getNomesFuncionarios() {
    return this.http.get<string[]>(this.url);
  }
}

Não estou sabendo encontrar o tal de console para visualizar, o retorno do meto console.log(): como faço para visualizar a saida desse metodo?

Ao apertar F12 no navegador, deve aparecer isso:

Depois só ir na aba console.

Dê uma olhada depois nesse link: https://developer.chrome.com/docs/devtools/overview/

No meu caso o console não apresenta nada utiizo o mozila!
Precisa testar ve se a conexão tras os nomes?
O primeiro array é preenchido pelo funcionario.service no metodo: RetornaFuncionarios() e não preenche o selectbox:::::: precisaria verificar o array preenchido com funcionario.service

O segundo array preenchido com os nomes, carrega o selectbox


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

  nomeDosFuncionarios:String[];


  nomeDosFuncionarios:String[] = ["paula","maria","joao"];
  atividade:Atividade;  

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

Vish: tem alguns erros ve se pode me ajudar: primeiro, deveria ter uma forma de pegar os atributos individuais, como abaixo: porém, a única forma que consegue chegar no spring e lançar uma exceção é a primeira linha aquela que você me enviou: preciso disso poque o nome dos funcionários estão no selectbox, e é preciso pegar esse nome, e lá no spring com esse nome eu pego o funcionario para inserir na atividade e dai cadastrar a atividade:

OnSubmit(){
     this.atividade = this.formulario.value;

     
     /*this.atividade.descricao = this.formulario['descricao'].value
     this.atividade.status = this.formulario['status'].value
     this.atividade.prioridade = this.formulario['prioridade'].value
     this.atividade.funcionario.nome = this.formulario['funcionario'].value
     this.atividade.dataPrevista = this.formulario['dataPrevista'].value*/
     //console.warn(this.formulario.value);

     this.service.createAtividade(this.atividade)
    .subscribe(data=>{alert("Se agrego com exito...!!!");
    this.router.navigate(["listar"]);
   // console.warn(this.formulario.value);
     //this.formAtividade.reset(this.atividade);
    })
   }

Essa ferramenta que tem no chrome, tb tem uma equivalente no mozilla (e vc acessa da mesma forma, usando F12).

Seria bom, para ver se está funcionando e retornando os dados corretamente.

nomeDosFuncionarios:String[];

nomeDosFuncionarios:String[] = ["paula","maria","joao"];

Acho que vc não pode ter duas propriedades no componente com o mesmo nome não.

Uma coisa, como é a estrutura do json que tem que passar para o backend?

Estou usando o crome e aprendi verificar, na verdade o problema é o funcionaio porque é um objeto: resolvi o problema criando um funcionario e adicionando a atividade, agora falta pegar o value do NGvalue e passar para o nome do funcionario: como faço para pegar esse valor:

<div class="form-group">
                            <label for="selectFuncionario">FUNCIONÁRIO</label>
                            <select class="form-control" id="funcionario" formControlName="funcionario" style="background-color: lightblue;">
                            <option *ngFor="let funcionario of nomeDosFuncionarios" [ngValue]="funcionario">
                                {{ funcionario}}
                                  <!-- <option selected>SELECIONE</option>
                                   <option>Pompeo Cesar da Silva</option>
                                   <option>Alexandrovina</option>
                                   <option>Catarina</option>-->
                                </option>
                            </select>
                        </div>

Funcionario:

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='';
  }

Aqui preciso pegar o value, mas nada que faço funciona:

OnSubmit(){
     this.atividade = this.formulario.value;
     this.funcio.nome = this.atividade.funcionario.nome;
     this.atividade.funcionario = this.funcio;
     
     /*this.atividade.descricao = this.formulario.getRawValue().descricao
     this.atividade.status = this.formulario.value['status']
     this.atividade.prioridade = this.formulario.value['prioridade']
     this.atividade.funcionario.nome = this.formulario.value['funcionario']
     this.atividade.dataPrevista = this.formulario.value['dataPrevista']*/
     console.log(this.formulario.value);