2012-07-02 8 views

Odpowiedz

159

Istnieje cała sekcja w dokumentach o nazwie 16.3.3.4 Mapping the request body with the @RequestBody annotation. I jeden o nazwie 16.3.3.5 Mapping the response body with the @ResponseBody annotation. Proponuję skonsultować te sekcje. Również istotne: @RequestBody Javadocs, @ResponseBody Javadocs

przykłady wykorzystania byłoby coś takiego:

Korzystanie z Javascript biblioteki takich jak jQuery, byś umieścić JSON-Object tak:

{ "firstName" : "Elmer", "lastName" : "Fudd" } 

Twój metoda kontroler będzie wyglądać następująco:

// controller 
@ResponseBody @RequestMapping("/description") 
public Description getDescription(@RequestBody UserStats stats){ 
    return new Description(stats.getFirstName() + " " + stats.getLastname() + " hates wacky wabbits"); 
} 

// domain/value objects 
public class UserStats{ 
    private String firstName; 
    private String lastName; 
    // + getters, setters 
} 
public class Description{ 
    private String description; 
    // + getters, setters, constructor 
} 

teraz, jeśli masz Jackson na ścieżce klas (i mieć konfigurację <mvc:annotation-driven>), Spring będzie konwertować przychodzący JSON do obiektu UserStats z treści posta (ponieważ dodano adnotację) i będzie serializować zwracany obiekt do JSON (ponieważ dodałeś adnotację @ResponseBody). Więc Przeglądarka/klient zobaczy ten wynik JSON:

{ "description" : "Elmer Fudd hates wacky wabbits" } 

Zobacz tę poprzednią odpowiedź kopalni dla kompletnego przykład robocza: https://stackoverflow.com/a/5908632/342852

Uwaga: RequestBody/ResponseBody nie jest oczywiście ograniczony do JSON, oba mogą obsługuje wiele formatów, w tym zwykły tekst i XML, ale JSON jest prawdopodobnie najczęściej używanym formatem.


Aktualizacja: Odkąd wiosennym 4.x, zwykle nie będzie używać @ResponseBody na poziomie metody, ale raczej @RestController na poziomie klasy, z tym samym skutkiem. Zobacz Creating REST Controllers with the @RestController annotation

+2

Wielkie dzięki @Sean – leo

+0

W połączonej odpowiedzi użyłeś adnotacji '@ ResponseBody' w parametrze, a nie w metodzie. Dostaję błędy próbując umieścić to na metodzie, więc zakładam, że twoja druga odpowiedź jest poprawna. Myślę, że powinieneś mieć 'getDescription (@RequestBody UserStats stats) powyżej. – Patrick

+1

@Patrick nie, '@ RequestBody' jest na parametrze,' @ ResponseBody' jest na metodzie. ważna różnica! –

0
package com.programmingfree.springshop.controller; 

import java.util.List; 

import org.springframework.web.bind.annotation.PathVariable; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.bind.annotation.RestController; 

import com.programmingfree.springshop.dao.UserShop; 
import com.programmingfree.springshop.domain.User; 


@RestController 
@RequestMapping("/shop/user") 
public class SpringShopController { 

UserShop userShop=new UserShop(); 

@RequestMapping(value = "/{id}", method = RequestMethod.GET,headers="Accept=application/json") 
public User getUser(@PathVariable int id) { 
    User user=userShop.getUserById(id); 
    return user; 
} 


@RequestMapping(method = RequestMethod.GET,headers="Accept=application/json") 
public List<User> getAllUsers() { 
    List<User> users=userShop.getAllUsers(); 
    return users; 
} 


} 

W powyższym przykładzie, że będzie wyświetlać wszystkie dane użytkownika, a zwłaszcza id teraz chcę używać zarówno identyfikator i nazwę,

1) localhost: 8093/plejson/sklep/user < - --this link będzie wyświetlać wszystkie dane użytkownika
2) localhost: 8093/plejson/sklep/user/11 < ---- jeśli mogę użyć w 11 elementów złącznych, to wyświetli dany użytkownik 11 szczegóły

teraz chcesz używać zarówno identyfikatora, jak i nazwy:

localhost: 8093/plejson/shop/user/11/raju < ----------------- lubię to oznacza, że ​​możemy użyć dowolnego w tym celu, pomóżcie mi .....

+0

Proszę poprawić formatowanie odpowiedzi i przykładowy kod. –

+0

Proszę opisać, w jaki sposób ten kod pomaga ankieterowi. Dziękuję Ci. –

+0

http://www.programming-free.com/2014/03/spring-mvc-40-restful-web-service-json.html .................. ..przez ten link dostaniesz ... dziękuję – user5409646

15

@RequestBody: Adnotacja wskazująca parametr metody powinna być powiązana z treścią żądania HTTP.

Na przykład:

@RequestMapping(path = "/something", method = RequestMethod.PUT) 
public void handle(@RequestBody String body, Writer writer) throws IOException { 
    writer.write(body); 
} 

@ResponseBody adnotacji można umieścić na metody i wskazuje, że typ zwracany powinien być napisany prosto do korpusu odpowiedzi HTTP (a nie umieszczone w modelu, lub interpretowane jako nazwa widoku).

Na przykład:

@RequestMapping(path = "/something", method = RequestMethod.PUT) 
public @ResponseBody String helloWorld() { 
    return "Hello World"; 
} 

Alternatywnie, możemy użyć @RestController adnotacji zamiast @Controller adnotacji. Spowoduje to usunięcie konieczności korzystania z @ResponseBody.

for more details

0

Poniżej znajduje się przykład sposobu w kontrolerze Java.

@RequestMapping(method = RequestMethod.POST) 
@ResponseBody 
public HttpStatus something(@RequestBody MyModel myModel) 
{ 
    return HttpStatus.OK; 
} 

Korzystając @RequestBody adnotacji dostaniesz twoje wartości odwzorowany z utworzonego w systemie do obsługi żadnego konkretnego połączenia modelu. Korzystając z @ResponseBody, możesz wysłać wszystko z powrotem do miejsca, z którego wygenerowano żądanie. Obie rzeczy będą łatwo mapowane bez pisania żadnego niestandardowego analizatora składni itp.