POST czy GET - Spring

POST czy GET - Spring
AK
  • Rejestracja:prawie 8 lat
  • Ostatnio:ponad 6 lat
  • Postów:30
0

Witam. Może głupie pytanie, ale do przesłania jednego parametru do controllera, a w nim dodanie czegoś do bazy danych dla tego id powinienem użyć geta czy posta?

Użyłem geta jak niżej, ale zastanawiam się czy poprawniej nie powinno być to robione postem?

Kopiuj
@GetMapping("/add")
	public void add(@RequestParam Integer id)  {
		zapisuję coś do bazy
	}
edytowany 1x, ostatnio: akswery
PI
  • Rejestracja:ponad 9 lat
  • Ostatnio:5 miesięcy
  • Postów:2787
0

jak tylko id przesyłasz to spoko getem. Nawet weź to wrzuć do urla i wtedy @PathVariable

AK
  • Rejestracja:prawie 8 lat
  • Ostatnio:ponad 6 lat
  • Postów:30
0

A jak chcę przekazać jeszcze jakąś wartość? np id obiektu i wartość.Mam to zrobione GETem tak:

Kopiuj
@GetMapping("/add/{obj_id}")
	public String add(@PathVariable("obj_id") Long obj_id, @RequestParam String value)  {\
       //dodaję w bazie do obiektu o id = obj_id wartość value.
}

To nadal GET jest ok?
POSTa używać jak przesyłam więszką ilość danych w formularzu (np przy rejestracji) ?
Chodzi mi o to, że np jestem na testach do nowej pracy i czy użycie GETa w takiej sytuacji nie zostanie źle odebrane?

edytowany 3x, ostatnio: akswery
jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:30 minut
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4709
4

Generalnie warto iść zgodnie z logicznym założeniem:
GET - tylko pytam o coś i nie zmieniam systemu
POST - coś dodaje do systemu (zmieniam)
PUT - updatuje coś istniejącego w systemie
DELETE - kasuje

czyli u Ciebie raczej POST.


jeden i pół terabajta powinno wystarczyć każdemu
PI
Ajaj, nie doczytałem że on coś zapisuje do bazy. Nie wiem czemu założyłem, że pobiera tylko :D
AK
  • Rejestracja:prawie 8 lat
  • Ostatnio:ponad 6 lat
  • Postów:30
0

Ostatnie pytanie :) Jak za pomocą POST wysłać dwie wartości np typu String. Wszędzie jest tak jak w przykładzie czyli zwracany modelAttribute który jest obiektem klasy (tu Task z polem String o nazwie title i description), a przecież nie będę specjalnie robił dodatkowej klasy z polami title i description. Nigdzie nie mogłem znaleźć rozwiązania dlatego zrobiłem to za pomocą GETa.

Kopiuj
 @PostMapping(value = "/add")
public String add(@ModelAttribute("objForm") Task task, BindingResult bindingResult, Model model, HttpServletRequest request) 
{
}

<form:form  method="POST"
		action="${contextPath}/add" modelAttribute="objForm">
                <form:input path="title" type="text"	id="title"  />
                <form:input path="description" type="text"	id="description"  />
</form:form>

No chyba że nie ma innego wyjśćia i trzeba zrobić klasę

edytowany 5x, ostatnio: akswery
jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:30 minut
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4709
1
akswery napisał(a):

a przecież nie będę specjalnie robił dodatkowej klasy z polami title i description.

I tutaj zachodzi pytanie. Dlaczego ?

btw. jeśli Ci naprawde szkoda klas. to faktycznie nie musisz.
https://stackoverflow.com/questions/17964841/how-to-get-param-in-method-post-spring-mvc
i zobacz odpowiedź Shamim Ahmmed


jeden i pół terabajta powinno wystarczyć każdemu
edytowany 1x, ostatnio: jarekr000000

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.