Giriş
Açıklaması şöyle. POST/PUT gibi işlemlerde, Http içindeki veriyi nesneye çevirmek içindir.
Yanlış Kullanım
Örnek
Spring nesnenin tipini tam olarak bilmek zorundadır. Yoksa Json metnini hangi nesneye çevireceğini bilemez. Şu kod yanlış
Açıklaması şöyle. Metod imzasında tek bir @RequestBody nesnesi olabilir.
Örnek
Elimizde şöyle bir kod olsun
Açıklaması şöyle. POST/PUT gibi işlemlerde, Http içindeki veriyi nesneye çevirmek içindir.
@RequestBody annotated parameter is expected to hold the entire body of the request and bind to one object.Açıklaması şöyle.
İmzası şöyle.@RequestBody annotation maps the HttpRequest body to a transfer or domain object, enabling automatic deserialization of the inbound HttpRequest body onto a Java object.
@Target(value=PARAMETER)
@Retention(value=RUNTIME)
@Documented
public @interface RequestBody
/*Annotation indicating a method parameter should be bound to the body of the
web request. The body of the request is passed through an
HttpMessageConverter to resolve the method argument depending on the
content type of the request.*/
GET vs POST İsteği
HTTP Get isteğinde Request Body göndermek mümkün ancak yapılmaması lazım.
Örnek
Şöyle yaparız
// In a standard POST mapping, you are able to specify a @RequestBody.
@PostMapping("/pokemon")
public Pokemon addPokemon(@RequestBody PokemonAddRequest pokemonAddRequest) {
...
}
// It turns out, you can write your @GetMapping in the same way,
// albeit without the @RequestBody annotation.
@GetMapping("/pokemon")
public Pokemon getPokemon(PokemonSearchRequest pokemonSearchRequest) {
...
}
Örnek
Spring nesnenin tipini tam olarak bilmek zorundadır. Yoksa Json metnini hangi nesneye çevireceğini bilemez. Şu kod yanlış
void foo (@RequestBody Object reqBody);
ÖrnekAçıklaması şöyle. Metod imzasında tek bir @RequestBody nesnesi olabilir.
@RequestBody annotated parameter is expected to hold the entire body of the request and bind to one objectŞu kod yanlış
void foo (@RequestBody Foo foo1, @RequestBody Foo foo2);
Doğru KullanımÖrnek
Elimizde şöyle bir kod olsun
public class DataRequest {
private Integer value1;
private Integer value2;
...
}
Post isteği ile gönderilen Http içindeki Json nesnesini otomatik olarak Java nesnesine çevirmek için şöyle yaparız. @PostMapping(value = "/addNumber")
public String controllerMethod(@RequestBody DataRequest request){
Integer value1 = request.getValue1();
Integer value2 = request.getValue2();
...
String res= ...;
return res;
}
Çağırmak için şöyle yaparız.var v1 = document.getElementById('n1').value;
var v2 = document.getElementById('n2').value;
var str = "{value1:} + v1 + ", value2:" + v2 + "}";
var xmlhttp = new XMLHttpRequest();
xhttp.open("POST", "http://localhost:8080/Cloudnet/login/addNumber", true);
xmlhttp.setRequestHeader("Content-Type", "application/json");
xmlhttp.send(JSON.stringify(str));
Hiç yorum yok:
Yorum Gönder