Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Montar Json com vários métodos

Olá pessoal. Estou fazendo o projeto final da formação Java, mas empaquei a dias aqui em um problema, e não consigo resolver.

O projeto pede para retornar um web service com um Json contendo algumas informações: dados dos livros, quantidade de produtos retornados e data da consulta.

Eu consegui fazer a parte mais "difícil" e empaquei na mais fácil, que é mostrar os dados na tela.

Por exemplo, com este método abaixo está retornando o Json com os dados dos livros, tudo certinho.

package br.com.casadocodigo.loja.controllers;

// imports

@Controller
@RequestMapping("/relatorio-produtos")
public class RelatorioProdutosController {

    @Autowired
    private ProdutoDAO dao;

    @Temporal(TemporalType.DATE)
    private String data;

    @RequestMapping
    @ResponseBody
    public List<Produto> relatorioProdutos(String data) {
        List<Produto> relatorioProdutos = dao.relatorioProdutos(data);
        System.out.println(relatorioProdutos);
        return relatorioProdutos;
    }    
}

E com este método retorna a data como Json

@RequestMapping
@ResponseBody
@Temporal(TemporalType.DATE)
private LocalDate dataAtual() {
LocalDate dataAtual = java.time.LocalDate.now();
return dataAtual;

No caso, eles tem que aparecer na mesma tela (mesma URL), mas não consigo construir o Json com as duas informações. Mas se deixo uma ou outra funciona. Alguém pode me dar uma luz por favor?

(Desculpem se não me expressei muito bem ou usei alguns termos errados, sou iniciante em programação e estou usando este projeto para aprender na prática)

7 respostas

Alguém?

Olá Kenni, tudo bem?

Foi mal a demora :^)

Vou te dar uma dica: a ideia dessa funcionalidade é retornar um relatório, correto?

O relatório deve ser composto por uma dataGeracao, quantidade e uma lista de produtos.

Por que não agrupar essas três informações em uma classe Relatorio e retorná-la?

Sacou a ideia?

solução!

Opa. Obrigado pelo retorno. Na verdade consegui solucionar pouco tempo antes de me responder. Mas fiz o código dentro do RelatorioProdutosController mesmo. Ficou assim a classe

package br.com.casadocodigo.loja.controllers;

//imports

@Controller
@RequestMapping("/relatorio-produtos")
public class RelatorioProdutosController {

    @Autowired
    private ProdutoDAO dao;

    @RequestMapping(method = RequestMethod.GET)
    @ResponseBody
    public String relatorioProdutos(String data) {
        List<Produto> relatorioProdutos = dao.relatorioProdutos(data);
        int qtdeProdutos = relatorioProdutos.size();

        LocalDateTime dataAtual = java.time.LocalDateTime.now();

        JSONObject json = new JSONObject();

        json.put("quantidade", qtdeProdutos);
        json.put("dataGeracao", dataAtual);
        json.put("produtos", relatorioProdutos);

        return json.toString();
    }

}

Essa é uma forma adequada de fazer ou é melhor conforme você me indicou?

(Neste método que criei apenas estou com um problema na hora de mostrar a data de lançamento dos livros, não está na formatação correta, estou tentando solucionar).

Sua solução tem uma observação, imagine alguns casos por exemplo: digamos que no médoto put tenha digitado o nome errado de algum campo...

json.put("proddutos", relatorioProdutos);

por exemplo.

A IDE não conseguiria te avisar que há algum problema. Ou seja, você só descobriria que deu erro em tempo de execução. (O que pode ser problemático)

Olá Kenni, tudo bem?

Sua dúvida foi esclarecida?

Olá. Sim, obrigado!

Disponha, vou fechar o tópico :)