Wpis z mikrobloga

hej, pobieram sobie z bazy danych obiekt i zwracam go jako jsona, mam taką funkcję w kontrolerze:
@ GetMapping(value="/{employeeId}", produces = MediaType.APPLICATIONJSONVALUE)
@ ResponseStatus(HttpStatus.OK)
public ResponseEntitygetEmployee(@PathVariable(value="employeeId") int employeeId){
return new ResponseEntity<>(employeeQueryService.getEmployee(employeeId), HttpStatus.OK);
}

to powoduje, że jak wejdę na localhost:8080/{employeeId} to widzę po prostu zwracanego jsona. A chciałbym zrobić tak żeby tego jsona wykorzystać do wypełnienia tabeli z widoku html. Samo pobraniei jsona ajaxem i wypełnienie za pomocą jquery/js nie byłoby problemem. Ale nie wiem jak zwrócić w springu jednocześnie widok (html z tabelą do wypełnienia) i jsona. Z tego co wiem to można zwrócić jedno lub drugie.

Jak mogę sobie z tym poradzić?

ps w serwisie mam własną serializację, bo json i obiekt @ entity ma inną strukturę.

#java #spring #programowanie #json #hibernate #rest #js #naukaprogramowania #springboot
  • 10
@lukasz890123: to po co Ci w takim razie ten json? Zrób normalny get zwracający widok, a w środku tej metody wyciągnij z bazy sobie potrzebny obiekt jakimś serwsem do tego służącym i z tego obiektu poustawiaj potrzebne dane w tabelkach

widzę, że dopisałeś ps - to zrób kolejną warstwę - DTO, która będzie trzymała dane potrzebne do wyświetlania czy czego tam
@lukasz890123: to może napisz co chcesz osiągnąć, bo jak na moje oko, to robisz coś na około, ale nie wiem co sobie tam wymyśliłeś

dużo szycia, szczególnie z tym robieniem jsona tylko po to, żeby go obsłużyć w jquery - a formData znasz? można sobie normalnie jak człowiek przekazać do widoku model, a później jak już musisz się babrać w jquery i robić jakieś ajax to można dane z modelu wciągnąć
@kaervek potrzebuję przesłać z bazy dane do widoku, klasa Employee oznaczona jako @ entity ma w sobie ArrayList, w klasie Day jest kilka rzeczy, m.in. obiekt LocalDate, ale w samym widoku nie potrzebuje całej tej reszty tylko właśnie ten LocalDate, więc mam klasę EmployeeQueryDTO, serwis, który przekształca to co dostaje z bazy na obiekt, który będzie potrzebny w widoku, robię własną serializację i zamiast ArrayList przesyłam jsona, który jest odpowiednikiem ArrayList a
@lukasz890123: dalej nie rozumiem coś Ty się tak na tego jsona uparł :D

masz swojego employee, który ma listę jakichś dni, nieistotne, ok, wszystko jest zawarte w modelu

Ty chcesz wyszukać usera, możesz to zrobić po parametrze id, wyszukujesz tego usera i przekazujesz ten obiekt w serwisie, nazwijmy go populatorem ( przekazujesz employee i zwracasz employeedto ), który mapujesz sobie w środku jakkolwiek chcesz, dodajesz ten dto obiekt do modelu i
@kaervek: tam jest relacja manytomany

@ ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@ JoinTable(name="employee_work_day",
joinColumns = {@JoinColumn(name="employee_id", referencedColumnName = "employee_id")},
inverseJoinColumns = {@ JoinColumn(name="day_id", referencedColumnName = "day_id")})
public List variant;

no nie upieram się już na jsona
w poście, który zalinkowałem próbuje teraz ogarnąć to inaczej poprzez dodanie do ModelAndView obiektu DTO, tak to wygląda:

@ GetMapping(value="/test")
public ModelAndView passEmployeeAndView(){
ModelAndView modelAndView = new ModelAndView("plan-vacations");
EmployeeQueryDTO employeeQueryDTO = employeeQueryService.getEmployee(1);
System.out.println("Zanim prześlę
@lukasz890123:

@ GetMapping(value="/test")
public String blablablabla(final Model model){

EmployeeQueryDTO employeeQueryDTO = employeeQueryService.getEmployee(1);
System.out.println("Zanim prześlę wyświetle tu: ");
System.out.println(employeeQueryDTO);
model.addAttribute("employee", employeeQueryDTO );
return "nazwaWidoku";
}

w widoku pod zmienną employee będziesz miał co potrzebujesz