Spring Boot - pobranie danych z bazy w servletcie za pomocą Repository

0

W swojej aplikacji webowej chciałbym mieć możliwość generowania raportów w postaci plików pdf, do tych raportów byłyby pobierane dane z bazy danych. Aplikacja jest zbudowana na Spring Boot i pobieranie danych z bazy w kontrolerze wygląda tak, że mam obiekt klasy Employee, który jest encją. Ponadto mam następujący interfejs:

import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface EmployeesRepository extends CrudRepository<Employee, Long>{

}

Fragment kontrolera, w którym jest użyty powyższy interfejs, wygląda tak:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping("/employees")
public class EmployeesController {
	
	@Autowired
	private EmployeesRepository repository;
        
	/*
	*
	*/

	@RequestMapping(value="/{employeeID}/edit", method=RequestMethod.GET)
	public String edit(@PathVariable long employeeID, Model model){
		Employee employee = repository.findOne(employeeID);
		model.addAttribute("employee", employee);
		return "employee/edit";
	}

}

W przypadku kontrolera wszystko działa dobrze tzn. obiekt repository zwraca encję z bazy danych na podstawię podanego id. Niestety jeśli chcę zrobić coś takiego w servletcie to ten obiekt jest nullem:

import java.io.IOException;

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

import org.springframework.beans.factory.annotation.Autowired;

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;

public class ReportEmployeeServlet extends HttpServlet{

	@Autowired
	private EmployeesRepository repository;
	
	public void doGet(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
		
			response.setContentType("application/pdf");
			try {
				Document document = new Document();
				PdfWriter.getInstance(document, response.getOutputStream());
				document.open();
				
				long employeeID = Long.parseLong(request.getParameter("employeeID"));
				Employee employee = repository.findOne(employeeID);
				
				PdfPTable table = new PdfPTable(2);

				table.addCell(employeeID);
				table.addCell(employee.getName());

				document.add(table);
				document.close();
			} catch (DocumentException de) {
				throw new IOException(de.getMessage());
			}
	}
}

Co powinienem zrobić aby obiekt repository w servletcie nie był nullem? Myślałem nad tym, żeby generowanie pdf'a przenieść do kontrolera, ale wtedy nie mam pojęcia jak zrobić żeby po wygenerowaniu raport pojawił w przeglądarce tak jak ma to miejsce w przypadku servletu. Może polecacie jakąś inną bibliotekę do tworzenia plików pdf, jak widać korzystam z iText?

0

YYY
Servlet musi być beanem (czy to @Bean,czy @Component) poddanym context-component scanowi?
Klasa oznaczona @Controller czy @RestController staje beanem Springowym (zakładają że context-component scan obejmuje dany pakiet) i dlatego w tym przypadku działa
Musisz sie douczyć o Spring IoC

EDIT:
Patrz pierwszy lepszy przykład gdzie PDF to widok:
http://www.codejava.net/frameworks/spring/spring-web-mvc-with-pdf-view-example-using-itext-5x

1 użytkowników online, w tym zalogowanych: 0, gości: 1