Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

JSON não está gerando no Interceptador

Boa tarde pessoal, alguém pode dar um auxílio? Não está gerando JSON após criar os interceptador. Segui os passos colocados pelo professor mais meu JSON não aparece, aparece as chaves vazias. Podem me ajudar? Vou postar o código

package br.com.alura.mvc.mudi.interceptor;

import java.time.Duration;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

public class InterceptadorDeAcessos extends HandlerInterceptorAdapter{


    public static List<Acesso> acessos = new ArrayList<Acesso>();



    /**
     * Método de filtro em spring chamado de Interceptor. Coleta os dados de todas as requisoções 
     * da aplicação quando é invocado.
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {

        Acesso acesso = new Acesso();
        acesso.path = request.getRequestURI();         
        acesso.data = LocalDateTime.now();

        request.setAttribute("acesso", acesso);         

        return true;
    }


    /**
     * 
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception {

        Acesso acesso = (Acesso)request.getAttribute("acesso");             
        acesso.duracao = Duration.between(acesso.data, LocalDateTime.now());   

        acessos.add(acesso);


    }


    public static class Acesso {

        private String path;
        private LocalDateTime data;
        private Duration duracao;


        public String getPath() {
            return path;
        }

        public void setPath(String path) {
            this.path = path;
        }

        public LocalDateTime getData() {
            return data;
        }

        public void setData(LocalDateTime data) {
            this.data = data;
        }

        public Duration getDuracao() {
            return duracao;
        }

        public void setDuracao(Duration duracao) {
            this.duracao = duracao;
        }


    }

}

A classe WebConfig

package br.com.alura.mvc.mudi;

import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

import br.com.alura.mvc.mudi.interceptor.InterceptadorDeAcessos;

public class WebConfig extends WebMvcConfigurationSupport{

    @Override
    protected void addInterceptors(InterceptorRegistry registry) {

        registry.addInterceptor(new InterceptadorDeAcessos()).addPathPatterns("/**");

    }
}

E a classe REST

package br.com.alura.mvc.mudi.api;

import java.util.List;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import br.com.alura.mvc.mudi.interceptor.InterceptadorDeAcessos;
import br.com.alura.mvc.mudi.interceptor.InterceptadorDeAcessos.Acesso;

@RequestMapping("acessos")
@RestController
public class AcessosREST {


    @GetMapping
    public List<Acesso> getAcessos() {

        return InterceptadorDeAcessos.acessos;

    }

}
1 resposta
solução!

Oi!

Coloca um System.out para verificar se o interceptador está sendo chamado:

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
        throws Exception {

    Acesso acesso = new Acesso();
    acesso.path = request.getRequestURI();         
    acesso.data = LocalDateTime.now();

    request.setAttribute("acesso", acesso);

    System.out.println("Interceptador chamado!");
    System.out.println("QTD acessos: " +acessos.size());

    return true;
}