2012-11-21 36 views
6

Tôi có một số nghi ngờ về như thế nào @RequestMapping và @RequestBody thực woks.I có một mã số đó là như sau:Bất cứ ai có thể giải thích cách @RequestMapping và @RequestBody hoạt động không?

@Controller 
public class CoreController { 
@Autowired 
LoggerExtension log; 
@Autowired 
DoService doService; 
    @RequestMapping(value="/method.do") 
public @ResponseBody String getActionResponse(HttpServletRequest request,HttpServletResponse response){   
    String action = request.getParameter("action");  
    String gender = request.getParameter("gender"); 
    String language = request.getParameter("language"); 
      if("getLanguage".equalsIgnoreCase(action)){ 
      returnResponse = doService.getUserLanguage(msisdn); 
      } 
    } 
     return returnResponse; 
     } 

Tôi muốn biết làm thế nào để mã trên hoạt động? Xin hãy giúp tôi để xóa các khái niệm này ...

Trả lời

2

Các tài liệu Xuân giải thích nó rất tốt, cho @RequestMapping

Bạn sử dụng các chú thích @RequestMapping để ánh xạ các URL như /hẹn lên toàn bộ một lớp hoặc một phương thức xử lý cụ thể.

Trong trường hợp cụ thể của bạn, @RequestMapping(value="/method.do") có nghĩa là một yêu cầu http (trong phương pháp có) cho URI /method.do (ví dụ http://myserver.com/app/method.do) sẽ được xử lý bởi các chú thích phương pháp getActionResponse(HttpServletRequest,HttpServletResponse) và mùa xuân sẽ ràng buộc các thông số tự động.

Đối với @ResponseBody nó nói:

chú thích này có thể được đặt trên một phương pháp và chỉ ra rằng kiểu trả nên được viết thẳng cho cơ thể phản ứng HTTP

Trong trường hợp cụ thể của bạn , điều này có nghĩa là chuỗi trả về của phương thức được chú thích sẽ được ghi vào luồng đầu ra phản hồi hoặc người viết như bạn đang gọi một cái gì đó như thế này:

String result = getActionResponse(request, response) 
response.getWriter().print(result); //Suppose result is "en_US" or something 

Xem ServletResponse#getWriter() hoặc ServletResponse#getOutputStream()

1

Vì vậy, chỉ đơn giản là những gì nó làm là, theo 'bản đồ url' bày tỏ trong file xml của web.xml của bạn

Nó gắn thêm "method.do" để nó

vì vậy, ví dụ: tên ứng dụng của tôi là 'Hello' và dưới đây là web.xml của tôi

<servlet-mapping> 
    <servlet-name>mvc-dispatcher</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
</servlet-mapping> 

Bây giờ url của bạn cho đề cập của bạn sẽ được localhost/rest/method.do

@RequestMapping là một cách để nói cho servlet xử lý, rằng đáp ứng của strign là đáp ứng thực tế. Lý tưởng nhất là bạn sẽ có một cái nhìn mà đầu ra sẽ được chuyển tiếp. Nhưng trong trường hợp này trả lời của bạn là quan điểm, vì thế mà chú thích @RequestMapping

1

Điều bạn đang xem là cách tạo WebService bằng Spring.
Chú thích @RequestMapping ánh xạ đường dẫn trong giá trị cho phương thức.

Vì vậy, (Giả sử máy chủ của bạn được thiết lập trên localhost: 8080 và chiến tranh của bạn được đặt tên là 'bối cảnh') nếu bạn gọi url sau:

http://localhost:8080/war/method.do 

máy chủ ứng dụng và mùa xuân sẽ gọi phương thức getActionResponse trên của bạn lớp học.

thường giá trị trả về của getActionResponse sẽ được coi là url, vì vậy nếu bạn trả về chuỗi 'văn bản', máy chủ sẽ chuyển hướng đến/war/text.
Chú thích @ResponseBody cho biết rằng chuỗi trả về sẽ thực sự được trả về dưới dạng thông điệp phản hồi, vì vậy sau khi bạn thực hiện cuộc gọi, máy chủ sẽ trả về phản hồi 200 OK với nội dung "văn bản".

chỉnh sửa: quên bản đồ cơ bản trong web.xml, xem câu trả lời của Jatin. vì vậy thay vì htt'p: // localhost: 8080/war/method.do nó sẽ là htt'p: // localhost: 8080/war/rest/method.do

+0

Cảm ơn bạn đã phản hồi.Điều này giúp tôi bạn có thể cho tôi biết điều gì sẽ xảy ra nếu tôi không đặt chú thích @ResponseBody, câu trả lời của máy chủ sẽ là gì? –

+0

Nếu đó là một chuỗi, nó sẽ coi nó là url để chuyển hướng đến. Nếu đó là một loại đối tượng khác, tôi nghĩ bạn sẽ nhận được một ngoại lệ. –

Các vấn đề liên quan