Может кто-нибудь объяснить @RequestBody
и @ResponseBody
аннотации в Spring 3? Для чего они? Любые примеры были бы замечательными.@RequestBody и @ResponseBody аннотации на весну
ответ
Существует целый раздел в документах под названием 16.3.3.4 Mapping the request body with the @RequestBody annotation. И один называется 16.3.3.5 Mapping the response body with the @ResponseBody annotation. Я предлагаю вам ознакомиться с этими разделами. Также актуальны: @RequestBody
Javadocs, @ResponseBody
Javadocs
примеры использования будет что-то вроде этого:
Использование JavaScript-библиотеки, как JQuery, вы бы отправить JSON-объект, как это:
{ "firstName" : "Elmer", "lastName" : "Fudd" }
Ваш метод контроллера будет выглядеть следующим образом:
// 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
}
Теперь, если у вас есть Jackson на вашем пути к классам (и установите настройку <mvc:annotation-driven>
), Spring преобразует входящий JSON в объект UserStats из тела сообщения (потому что вы добавили аннотацию @RequestBody
), и она будет сериализовать возвращаемый объект JSON (потому что вы добавили аннотацию @ResponseBody
). Таким образом, браузер/клиент увидит этот результат JSON:
{ "description" : "Elmer Fudd hates wacky wabbits" }
Посмотреть этот предыдущий ответ мой для полного рабочего примера: https://stackoverflow.com/a/5908632/342852
Примечание: RequestBody/ResponseBody, конечно, не ограничивается JSON, как можно обрабатывать несколько форматов, включая простой текст и XML, но JSON, вероятно, самый используемый формат.
Update: С тех пор как Spring 4.x, вы обычно не использовать @ResponseBody
на уровне метода, а скорее @RestController
на уровне класса, с тем же эффектом. См Creating REST Controllers with the @RestController annotation
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;
}
}
В приведенном выше примере они собираются, чтобы отобразить все пользовательские и определенный идентификатор детали теперь я хочу использовать как идентификатор и имя,
1) локальный: 8093/plejson/магазин/пользователь < - --this ссылка будет отображать все данные пользователя
2) локальный: 8093/plejson/магазин/пользователь/11 < ---- если я использую 11 в средствах ссылок, он будет отображать конкретного пользователя 11 деталей
сейчас хотите использовать оба идентификатора и имя
localhost: 8093/plejson/shop/user/11/raju < ----------------- как это это означает, что мы можем использовать любой в этом, пожалуйста, помогите мне .....
Исправьте форматирование образца ответа и кода. –
Просьба описать, как этот код помогает исследователю. Спасибо. –
http://www.programming-free.com/2014/03/spring-mvc-40-restful-web-service-json.html .................. .. через эту ссылку вы получите ... спасибо – user5409646
@RequestBody: аннотация, указывающая параметр метода, должна быть привязана к телу HTTP-запроса.
Например:
@RequestMapping(path = "/something", method = RequestMethod.PUT)
public void handle(@RequestBody String body, Writer writer) throws IOException {
writer.write(body);
}
@ResponseBody аннотаций может быть поставлен на методе и указывает, что тип возврата должен быть записан прямо в теле ответа HTTP (и не помещены в модели, или интерпретировать как имя вида).
Например:
@RequestMapping(path = "/something", method = RequestMethod.PUT)
public @ResponseBody String helloWorld() {
return "Hello World";
}
В качестве альтернативы можно использовать @RestController аннотацию вместо @Controller
аннотацию. Это устранит необходимость использования @ResponseBody
.
Ниже приведен пример способа в контроллере Java.
@RequestMapping(method = RequestMethod.POST)
@ResponseBody
public HttpStatus something(@RequestBody MyModel myModel)
{
return HttpStatus.OK;
}
С помощью @RequestBody аннотацию вы получите ваши ценности сопоставляются с моделью, созданной в вашей системе для обработки какого-либо конкретного вызова. Хотя при использовании @ResponseBody вы можете отправить что-нибудь обратно в место, откуда был сгенерирован запрос. Обе вещи будут отображаться без написания каких-либо пользовательских парсеров и т. Д.
- 1. Spring Upgrade с использованием аннотации @RequestBody или @ResponseBody
- 2. Получить RequestBody и ResponseBody в HandlerInterceptor
- 3. весны загрузка время выхода @Requestbody и @Responsebody
- 4. Время хранения в sql.Time через весну @RequestBody
- 5. @ResponseBody @ RequestBody- Объект, что происходит точно
- 6. @RestController: проверить @ResponseBody (а не @RequestBody)
- 7. использовать весну mvc3 @ResponseBody имеет 415 неподдерживаемый тип носителя, почему?
- 8. Внедрить функциональность @RequestBody в пользовательской аннотации
- 9. Нужно ли сериализовывать объекты для использования аннотаций @RequestBody @ResponseBody?
- 10. Тест безопасности на весну: проверка аннотации @ Необработанные (или @PreAuthorize)
- 11. Изучение Spring @RequestBody и @RequestParam
- 12. ResponseBody весной MVC 2
- 13. Spring MVC как работает @RequestBody
- 14. Spring Hibernate Validation @RequestBody
- 15. ResponseBody и SessionAttribute несовместимы?
- 16. Почему @RepositoryRestController не имеет аннотации @ResponseBody, например @RestController?
- 17. Spring @ResponseBody не может использовать сеанс
- 18. Нулевые значения как пустые строки при использовании аннотации @ResponseBody
- 19. WebRequest на объекте @RequestBody
- 20. дооснащения Dynamic ResponseBody
- 21. @RequestBody всегда пуст весной
- 22. AngularJS http.put multiple requestBody
- 23. Запрос на весну вперед
- 24. Spring @ResponseBody возвращение Списка
- 25. Bad Request 400 - @ RequestBody
- 26. Spring 3 Аннотации
- 27. Изменить @RequestBody объект, основанный на @PathVariable
- 28. Запрос на весну и масштаб весны
- 29. Путаница о @Controller @RestController и @ ResponseBody
- 30. Java - @ResponseBody String - ошибка 200
Большое спасибо @Sean – leo
В ответном ответе вы использовали аннотацию '@ ResponseBody' для параметра, а не метода. Я получаю ошибки, пытаясь поместить его в метод, поэтому я предполагаю, что ваш другой ответ правильный. Я думаю, вы должны иметь 'getDescription (@RequestBody UserStats stats)' выше. – Patrick
@Patrick no, '@ RequestBody' находится в параметре,' @ ResponseBody' находится в методе. важное отличие! –