Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: REST Post - lze sloučit metody pro získání objektu pomocí restu?

Aktivity
Avatar
Lubor Pešek
Člen
Avatar
Lubor Pešek:13.3.2019 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.3.2019 15:28
Odpovědět
13.3.2019 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.3.2019 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.3.2019 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.