1
resposta

@395b184e no resultado da busca.

Quando eu vejo o resultado da minha busca, não aparece as strings mas uma lista de códigos:

Resultado da busca:
1: br.com.alura.gerenciador.Empresa@395b184e
2: br.com.alura.gerenciador.Empresa@3a40146f
3: br.com.alura.gerenciador.Empresa@7ea9d708
4: br.com.alura.gerenciador.Empresa@1101d905
5: br.com.alura.gerenciador.Empresa@70793a03
6: br.com.alura.gerenciador.Empresa@4a20bb0f

//segue o meu código em BuscaEmpresa.java

package br.com.alura.gerenciador.web;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collection;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import br.com.alura.gerenciador.Empresa;
import br.com.alura.gerenciador.dao.EmpresaDAO;


@WebServlet(urlPatterns="/busca")
public class BuscaEmpresa extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {

        PrintWriter writer = resp.getWriter();
        writer.println("<html><body>");
        writer.println("Resultado da busca:<br/>");
        String filtro = req.getParameter("filtro");
        Collection<Empresa> empresas = new EmpresaDAO().buscaPorSimilaridade(filtro);
        writer.println("<ul>");
        for (Empresa empresa : empresas) {
            writer.println("<li>" + empresa.getId() + ": " + empresa + "</li>");
        }
        writer.println("</ul>");

        writer.println("</body></html>");

    }
}


// Esse é o EmpresaDAO

package br.com.alura.gerenciador.dao;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import br.com.alura.gerenciador.Empresa;

public class EmpresaDAO {

    private final static Map<Long, Empresa> EMPRESAS = new HashMap<>();
    static {
        geraIdEAdiciona(new Empresa("Doceria Bela Vista"));
        geraIdEAdiciona(new Empresa("Ferragens Docel"));
        geraIdEAdiciona(new Empresa("Alura"));
        geraIdEAdiciona(new Empresa("Google"));
        geraIdEAdiciona(new Empresa("Caelum"));
        geraIdEAdiciona(new Empresa("Casa do Código"));
    }

    public Collection<Empresa> buscaPorSimilaridade(String nome) {
        if (nome == null)
            return EMPRESAS.values();

        List<Empresa> similares = new ArrayList<>();
        for (Empresa empresa : EMPRESAS.values()) {
            if (empresa.getNome().toLowerCase().contains(nome.toLowerCase()))
                similares.add(empresa);
        }
        return similares;
    }

    public void adiciona(Empresa empresa) {
        geraIdEAdiciona(empresa);
    }

    private static void geraIdEAdiciona(Empresa empresa) {
        long id = EMPRESAS.size()+1l;
        empresa.setId(id);
        EMPRESAS.put(id, empresa);
    }

}
1 resposta

Oi LeAnna,

O problema ta nessa linha aqui:

writer.println("<li>" + empresa.getId() + ": " + empresa + "</li>");

Você está concatenando a variável empresa direto e aí, por debaixo do pano, o método toString da classe vai ser invado. Como vc não implementou, ele ta chamando o default e retornando essa string feia.