Ai đó có thể giải thích các chú thích @RequestBody
và @ResponseBody
trong Spring 3? Chúng là gì? Bất kỳ ví dụ nào cũng tuyệt vời.Chú thích @RequestBody và @ResponseBody trong Spring
Trả lời
Có toàn bộ Phần trong tài liệu được gọi là 16.3.3.4 Mapping the request body with the @RequestBody annotation. Và một gọi là 16.3.3.5 Mapping the response body with the @ResponseBody annotation. Tôi đề nghị bạn tham khảo những phần đó. Cũng liên quan: @RequestBody
javadocs, @ResponseBody
javadocs
ví dụ Cách sử dụng sẽ là một cái gì đó như thế này:
Sử dụng JavaScript thư viện như JQuery, bạn sẽ gửi một JSON-Object như thế này:
{ "firstName" : "Elmer", "lastName" : "Fudd" }
của bạn phương thức điều khiển sẽ trông giống như sau:
// 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
}
Bây giờ nếu bạn có Jackson trên đường dẫn lớp học (và có một thiết lập <mvc:annotation-driven>
), Spring sẽ chuyển đổi JSON đến đối tượng UserStats từ phần thân bài viết (vì bạn đã thêm chú thích @RequestBody
) và nó sẽ tuần tự hóa đối tượng trả về thành JSON (vì bạn đã thêm chú thích @ResponseBody
). Vì vậy, trình duyệt/Khách hàng sẽ thấy kết quả JSON này:
{ "description" : "Elmer Fudd hates wacky wabbits" }
Xem câu trả lời trước đây của tôi cho một ví dụ làm việc hoàn chỉnh: https://stackoverflow.com/a/5908632/342852
Lưu ý: RequestBody/ResponseBody là tất nhiên không giới hạn JSON, cả hai có thể xử lý nhiều định dạng, bao gồm cả văn bản thuần túy và XML, nhưng JSON có lẽ là định dạng được sử dụng nhiều nhất.
Cập nhật: Kể từ mùa xuân 4.x, bạn thường sẽ không sử dụng @ResponseBody
vào mức độ phương pháp, mà là @RestController
vào trình độ lớp, với tác dụng tương tự. Xem 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;
}
}
Trong ví dụ trên chúng sẽ hiển thị tất cả người dùng và id đặc biệt chi tiết bây giờ tôi muốn sử dụng cả id và tên,
1) localhost: 8093/plejson/cửa hàng/user < - liên kết --this sẽ hiển thị tất cả các chi tiết người dùng
2) localhost: 8093/plejson/cửa hàng/người dùng/11 < ---- nếu tôi sử dụng 11 phương tiện liên kết, nó sẽ hiển thị người dùng cụ thể 11 chi tiết
bây giờ tôi muốn sử dụng cả id và tên
localhost: 8093/plejson/shop/user/11/raju < ----------------- như thế này nó có nghĩa là chúng tôi có thể sử dụng bất kỳ một trong này xin vui lòng giúp tôi ra .....
Vui lòng sửa định dạng câu trả lời và mẫu mã. –
Vui lòng mô tả cách mã này giúp người hỏi. Cảm ơn bạn. –
http://www.programming-free.com/2014/03/spring-mvc-40-restful-web-service-json.html .................. ..đi qua liên kết này u sẽ nhận được ... cảm ơn bạn – user5409646
@RequestBody: Chú thích cho biết tham số phương pháp phải được ràng buộc với phần thân của yêu cầu HTTP.
Ví dụ:
@RequestMapping(path = "/something", method = RequestMethod.PUT)
public void handle(@RequestBody String body, Writer writer) throws IOException {
writer.write(body);
}
@ResponseBody chú thích có thể được đặt trên một phương pháp và chỉ ra rằng kiểu trả về phải được ghi thẳng vào cơ thể phản ứng HTTP (và không được đặt trong một mô hình, hoặc hiểu là tên chế độ xem).
Ví dụ:
@RequestMapping(path = "/something", method = RequestMethod.PUT)
public @ResponseBody String helloWorld() {
return "Hello World";
}
Ngoài ra, chúng ta có thể sử dụng @RestController chú thích ở vị trí của @Controller
chú thích. Điều này sẽ loại bỏ nhu cầu sử dụng @ResponseBody
.
Dưới đây là một ví dụ về một phương pháp trong một bộ điều khiển Java.
@RequestMapping(method = RequestMethod.POST)
@ResponseBody
public HttpStatus something(@RequestBody MyModel myModel)
{
return HttpStatus.OK;
}
Bằng cách sử dụng chú thích @RequestBody bạn sẽ nhận được giá trị được ánh xạ với mô hình bạn đã tạo trong hệ thống để xử lý bất kỳ cuộc gọi cụ thể nào. Mặc dù bằng cách sử dụng @ResponseBody, bạn có thể gửi bất kỳ thứ gì trở lại địa điểm từ nơi yêu cầu được tạo. Cả hai thứ sẽ được ánh xạ dễ dàng mà không cần viết bất kỳ trình phân tích cú pháp tùy chỉnh nào, v.v.
- 1. Spring @MVC và chú thích @RequestBody với dữ liệu x-www-form-urlencoded?
- 2. Spring MVC 3.2 @ResponseBody interceptor
- 3. Học Spring's @RequestBody và @RequestParam
- 4. Chú thích @Nam trong Spring MVC
- 5. @RequestMapping chú thích trong Spring MVC
- 6. Bản đồ Spring HandlerInterceptor với chú thích
- 7. Testing Spring MVC chú thích mapppings
- 8. Spring @ResponseBody Json Tham khảo chu kỳ
- 9. Chú thích Jackson bị bỏ qua trong Spring
- 10. Hiểu việc sử dụng các chú thích @ModelAttribute và @RequestAttribute trong Spring MVC
- 11. Chú thích ngữ cảnh làm gì trong Spring?
- 12. Bảo mật mùa xuân @RequestBody
- 13. Cách tạo và sử dụng chú thích tùy chỉnh có chú thích cấu hình Spring + JUnit Test Config?
- 14. Bất cứ ai có thể giải thích cách @RequestMapping và @RequestBody hoạt động không?
- 15. Khởi tạo lạc đà từ cấu hình chú thích Spring
- 16. Mocking Spring MVC BindingResult khi sử dụng chú thích
- 17. Khuyến nghị sử dụng chú thích @Required của Spring
- 18. Spring MVC có hỗ trợ chú thích JSR 311 không?
- 19. Chú thích Spring @Value luôn luôn đánh giá là rỗng?
- 20. Tiêm giá trị bên ngoài vào chú thích Spring
- 21. Spring MVC 3: Trả về XML thông qua @ResponseBody
- 22. Cách thêm chú thích tùy chỉnh vào Spring MVC?
- 23. Chú thích dựa trên Spring MVC LocaleChangeInterceptor không hoạt động
- 24. Spring AOP pointcut cho lập luận chú thích
- 25. Chú thích Spring @Async trên các phương thức giao diện
- 26. Spring AOP - pointcut cho mọi phương thức có chú thích
- 27. Spring MVC: @ResponseBody, 415 không được hỗ trợ Loại Truyền thông
- 28. chú thích() và văn bản() trong Matlab
- 29. Đi qua thuộc tính chú thích để meta-chú thích
- 30. Chú thích nhiều chú thích hiển thị trong MKMapView
Cảm ơn rất nhiều @Sean – leo
Trong câu trả lời được liên kết, bạn đã sử dụng chú thích '@ ResponseBody' trên tham số chứ không phải phương thức. Tôi nhận được lỗi cố gắng để đưa nó vào phương pháp, vì vậy tôi giả định câu trả lời khác của bạn là chính xác. Tôi nghĩ bạn nên có 'getDescription (@RequestBody UserStats stats)' ở trên. – Patrick
@Patrick no, '@ RequestBody' nằm trong tham số,' @ ResponseBody' là phương thức. sự khác biệt quan trọng! –