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

Json formatado

Boa tarde, acredito que o retorno da URI com os requisitos esteja sendo atendido, porém estou com problemas para trazer o json formatado na uri "relatorio-produtos"

Segue o controlador do relatório para a funcionalidade 1:

  • RelatorioProdutosController
package br.com.casadocodigo.loja.controllers;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import br.com.casadocodigo.loja.dao.ProdutoDAO;
import br.com.casadocodigo.loja.models.Relatorio;

@Controller
public class RelatorioProdutosController {

    @Autowired
    private ProdutoDAO dao;

    @RequestMapping(value="/relatorio-produtos", method=RequestMethod.GET)
    @ResponseBody
    public Relatorio listaProdutosCadastrados(@RequestParam(value = "data", required = false) String dataLancamento) throws ParseException {

        //Lista de livros com data e sem data
        if(dataLancamento != null) {
            SimpleDateFormat formatadorDeData = new SimpleDateFormat("yyyy-MM-dd");
            Date dataFormatada = formatadorDeData.parse(dataLancamento);
            Calendar data = Calendar.getInstance();
            data.setTime(dataFormatada);
            return dao.selecionaProdutosPorData(data);
        } else {
            return dao.selecionaProdutosSemData();
        }
    }    
}

Exemplo de retorno com parâmetro data:

  • casadocodigo/relatorio-produtos?data=2018-03-21
{"dataGeracao":1557426179217,"quantidade":1,"produtos":[{"id":5,"titulo":"Introdução à Arquitetura e Design de Software","descricao":"Uma visão sobre a plataforma Java","paginas":355,"sumarioPath":null,"precos":[{"valor":29.90,"tipo":"EBOOK"},{"valor":29.90,"tipo":"IMPRESSO"},{"valor":29.90,"tipo":"COMBO"}],"dataLancamento":1533178800000}]}

Alguém poderia me dar uma direção? Grato!

3 respostas

Coloca um produces = "application/json" no seu @RequestMapping:

@RequestMapping(value="/relatorio-produtos", method=RequestMethod.GET, produces = "application/json")

Boa noite Otávio, como vai? Muito obrigado pela ajuda, porém coloquei o produces="application/json" e resposta continua sem a formatação

solução!

Consegui! Faltava um método na classe AppWebConfiguration que extende WebMvcConfigurerAdapter para habilitar o pretty print reescrevendo o método "extendMessageConverters":

  • AppWebConfiguration.class
    @Override
     public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
         for ( HttpMessageConverter<?> converter : converters ) {
             if ( converter instanceof MappingJackson2HttpMessageConverter) {
                 MappingJackson2HttpMessageConverter jacksonConverter = (MappingJackson2HttpMessageConverter) converter;
                 jacksonConverter.setPrettyPrint(true);
             }
         }
     }

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software