Java týden
Procvič si angličtinu zdarma s naším americkým e-learningem! Learn more
Pouze tento týden sleva až 80 % na celý Java e-learning!
Avatar
Lubor Pešek
Člen
Avatar
Lubor Pešek:13. března 15:25

Zdravíčko,

hraju si s REST APIčkem a narazil jsem na dva způsoby, jak lze vytvářet nový objekt.

  1. přes JSP (kde ve formuláři pošlu nový objekt jako model)
  2. přes JSON (kdy si v postmanovi definuju nový objekt v JSON formátu)

Pokud by někdo znal další způsoby vytváření objektů ve Springu, rád se nechám poučit;)

Všechno mi funguje a teď tedy k problému.
Používám tyto dvě rozdílné metody, které ovšem volají stejnou servisu, stejnou metodu a předávají stejný parametr (nově vytvořený objekt).
Jediné, v čem se liší, tak samozřejmě v URI a potom v anotaci u parametru. První metoda používá @ModelAttribu­te("..") a druhá @RequestBody

A to se mi moc nelíbí. Obzvlášť když musím mít takhle o jednu speciální cestu navíc. Logika ukládání má teď zbytečně dva možné způsoby.
Lze tedy tyto dvě metody nějak sjednotit? Přikládám ukázku těchto dvou metod:

@PostMapping("/createByModel")
public void createByModel(@ModelAttribute("client") Client client) {
    clientService.createNewClient(client);
}

@PostMapping("/create")
public void create(@RequestBody Client client) {
    clientService.createNewClient(client);
}

Pochopitelně Client je moje entita.

Zkusil jsem:

  • stack overflow
  • Vyhledávat na googlu různá spojení s requestbody a modelattribute (a našlo mi to především odkazy na jejich rozdílnost)
  • procházel jsem řadu tutoriálů, které se tímto zabývají

Chci docílit: Chci zjistit, zda-li existuje funkce, která spojí tyto dvě možnosti vytváření objektů pomocí RESTu

Editováno 13. března 15:28
Odpovědět 13. března 15:25
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
Avatar
Neználek
Člen
Avatar
Odpovídá na Lubor Pešek
Neználek:26. března 22:32

Nezkoušel jsem, ale speciální cestu navíc by možná šlo eliminovat takto:

@PostMapping(value="/create", consumes = "application/x-www-form-urlencoded")
public void createByForm(@ModelAttribute("client") Client client) {
    clientService.createNewClient(client);
}

@PostMapping(value="/create", consumes = "application/json")
public void createByJSON(@RequestBody Client client) {
    clientService.createNewClient(client);
}

Spojení dvou metod do jedné mi nedává moc smysl. Jedná se sice o stejný objekt, ale o dvě různé reprezentace, a k tomu se ve Spring MVC obvykle používají různé metody.

 
Nahoru Odpovědět 26. března 22:32
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.