sách gpt4 ăn đã đi

Phân tích cách sử dụng SpringMVC @RequestBody

In lại Tác giả: qq735679552 Thời gian cập nhật: 28-09-2022 22:32:09 31 4
mua khóa gpt4 giày nike

CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.

Bài viết trên blog CFSDN này sử dụng phân tích của SpringMVC @RequestBody được tác giả sưu tầm và biên soạn. Nếu bạn quan tâm đến bài viết này thì nhớ like nhé.

Spring mvc là một khung mvc rất nhẹ có thể giảm đáng kể cấu hình và khiến việc chặn yêu cầu trở nên đơn giản hơn. Lần này, ghi lại cách sử dụng chú thích @RequestBody để nhận tham số, đặc biệt là tham số mảng.

Không cần nói thêm về cấu hình của vùng chứa. Đây là sechme của spring-servlet.xml.

 

Miễn là bạn thêm chú thích dưới tên gói tương ứng, bộ điều khiển tương ứng có thể được quét. Nói chung, @Controller được sử dụng.

RequestBody nhận các loại cơ bản.

@Controllerpublic class TestController {// chặn yêu cầu url @RequestMapping("test/test.do")@ResponseBody // Tham số trả về là JSON public void test(@RequestBody String name) {System.out.println("getParams : " + tên);}![Viết mô tả hình ảnh tại đây](https://img-blog.csdn.net/20161114115809292)}

@RequestBody chỉ cần nhận dữ liệu trong Nội dung yêu cầu POST.

Phân tích cách sử dụng SpringMVC @RequestBody

Gửi một yêu cầu như thế này và in nó trong bảng điều khiển java:

getParams: {"tên":"micro"} 。

@RequestBody nhận được một mảng cơ bản.

Sau đó, chúng tôi nhận được mảng các kiểu nguyên thủy:

	@RequestMapping("test/test.do") @ResponseBody public void test(@RequestBody Danh sách nameList) { System.out.println("getParams : " + nameList); }

Phân tích cách sử dụng SpringMVC @RequestBody

Bằng cách này, có thể lấy được các tham số. Không viết {"nameList":["name1", "name2"]} trong phần nội dung, điều này sẽ tạo ra một ngoại lệ.

@RequestBody là phần thân của yêu cầu POST tương ứng và phần thân là các tham số thu được. Nếu bạn muốn lấy chúng thông qua các tham số, bạn phải sử dụng chú thích @RequestParams:

	@RequestMapping("test/test.do") @ResponseBody public void test(@RequestParam("name") String name) { System.out.println("getParams : " + name); }

Phân tích cách sử dụng SpringMVC @RequestBody

Lưu ý rằng đó là yêu cầu GET và các tham số được đặt trực tiếp sau URL, do đó bạn có thể sử dụng @RequestParams để lấy giá trị tham số của tên tham số tương ứng. Nếu nó là một đối tượng phức tạp.

Sử dụng @RequestBody.

Xác định mô hình:

lớp Person { private Long id; private String name; // setter getter}

@RequestBody nhận các đối tượng phức tạp.

Cách nhận tham số.

@RequestMapping("test/test.do") @ResponseBody public void test(@RequestBody Person person) { System.out.println("getParams : " + person.getId() + " ," + person.getName()); }

Bạn có thể lấy các tham số. Các tham số trong phần thân sẽ tự động khớp với các thuộc tính của người đó và gán giá trị.

Lưu ý rằng tên phải nhất quán với tên biến thuộc tính của đối tượng. Nếu không, không thể lấy được các tham số. Ví dụ: bạn không thể viết {"i":1,"name://micro"} trong phần nội dung, do đó id của người đó là null.

@RequestBody nhận được một mảng các đối tượng phức tạp.

Nếu đó là một mảng đối tượng phức tạp:

	@RequestMapping("test/test.do") @ResponseBody public void test(@RequestBody List personList) { for (Person p : personList) { System.out.println(p.getId() + " ," + p.getName()); } }

Phương thức yêu cầu như sau. Lưu ý rằng định dạng trong phần thân là một mảng [].

Phân tích cách sử dụng SpringMVC @RequestBody

In bảng điều khiển:

1,vi mô 。

2,micro2 。

Tức là @RequestBody nhận được nhiều loại tham số khác nhau.

  。

Một số lưu ý khi sử dụng @RequestBody

Như chúng ta đã biết, chú thích @RequestBody trong springmvc là một chức năng rất thiết thực. Nó có thể giúp chúng ta phân tích dữ liệu json được gửi bởi máy khách (thiết bị di động, trình duyệt, v.v.) và gói gọn nó vào một lớp thực thể.

Nhưng điều tôi muốn nói hôm nay không phải là nguyên tắc của nó mà là ghi lại một số vấn đề gặp phải khi sử dụng chú thích @RequestBody trong một số công việc và để nhắc nhở phần lớn các nhà phát triển Java tránh những vấn đề tương tự.

Gần đây, có nhu cầu nhận dữ liệu json được gửi từ thiết bị của khách hàng. Thiết bị của khách hàng chỉ có thể sửa đổi địa chỉ IP, sau đó gửi dữ liệu qua phương thức đăng của giao thức http. Đương nhiên, tôi nghĩ đến việc xử lý nó trên trang đăng nhập, thêm tham số @RequestBody Kehu kehu trong phương thức toLogin và người dùng đã phân tích cú pháp và đóng gói dữ liệu json.

Không dài dòng nữa, hãy bắt đầu với mã, như hiển thị bên dưới:

@RequestMapping(value = "/toLogin") public ModelAndView toLogin(HttpServletRequest request, @RequestBody Kehu kehu) ném ngoại lệ { //Nhận dữ liệu json được gửi từ thiết bị khách hàng if (kehu != null && !StringUtil.isEmpty(kehu.cmd )) { uploadData(kehu); } ModelAndView mv = new ModelAndView() trangData = this.getPageData(request); pageData.put("SYSNAME", Tools.readTxtFile(Const.SYSNAME)); // Đọc tên hệ thống mv.setViewName("base/login"); trangData); trả về mv }

Mọi thứ có vẻ hoàn hảo. Kiểm tra nó trên trình duyệt và nhập localhost (dự án của tôi đã được đặt làm dự án mặc định và số cổng đã được thay đổi thành 80).

Tôi chết lặng và báo lỗi 400. Như được hiển thị bên dưới:

Phân tích cách sử dụng SpringMVC @RequestBody

Yêu cầu được gửi bởi khách hàng có cú pháp không chính xác.

Đã dịch: yêu cầu được gửi bởi khách hàng về mặt cú pháp không chính xác.

Đó là điều bình thường trước khi thêm @RequestBody Kehu kehu. Tôi đã xem mã nguồn của AskBody:

gói org.springframework.web.bind.annotation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import org.springframework.http.converter.HttpMessageConverter;/*** Chú thích chỉ ra tham số phương thức phải được liên kết với nội dung của yêu cầu web.* Nội dung của yêu cầu được truyền qua {@link HttpMessageConverter} để giải quyết* đối số phương thức tùy thuộc vào loại nội dung của yêu cầu. Tùy chọn, có thể áp dụng xác thực tự động* bằng cách chú thích đối số bằng {@code @Valid}.** 

Được hỗ trợ cho các phương thức xử lý được chú thích trong môi trường Servlet.** @author Arjen Poutsma* @since 3.0* @see RequestHeader* @see ResponseBody* @see org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter* @see org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter*/@Target(ElementType.PARAMETER)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface RequestBody { /** * Nội dung thân có bắt buộc không. *

Mặc định là {@code true}, dẫn đến ngoại lệ được ném ra trong trường hợp * không có nội dung thân. Chuyển thành {@code false} nếu bạn muốn * {@code null} được truyền khi nội dung thân là {@code null}. * @since 3.2 */ boolean required() mặc định là true;}

Giá trị trả về mặc định của phương thức được yêu cầu là đúng.

Điều này làm cho vấn đề trở nên rõ ràng. Khi tôi yêu cầu localhost, tôi đã không chuyển json, do đó, lỗi 400 đã được báo cáo do yêu cầu do khách hàng gửi không chính xác về mặt cú pháp.

Giải pháp: Chỉ cần thêm (required=false) sau @RequestBody. Chỉ ra rằng đối tượng kehu không cần phải được truyền vào.

/** *Truy cập trang đăng nhập* @RequestBody(required=false) chỉ ra rằng đối tượng kehu không cần phải được truyền vào. * Đảm bảo thêm bắt buộc=false, nếu không sẽ báo lỗi 400 khi đăng nhập. Mã lỗi: * Yêu cầu do khách hàng gửi có cú pháp không chính xác * @return * @throws Ngoại lệ */ @RequestMapping(value = "/toLogin") public ModelAndView toLogin(HttpServletRequest request, @RequestBody(required=false) Kehu kehu) ném ngoại lệ { //Nhận dữ liệu json được gửi từ máy xu if (kehu != null && !StringUtil.isEmpty(kehu.cmd)) { uploadData(kehu); } ModelAndView mv = new ModelAndView(); PageData pageData = this.getPageData(request); )); // Đọc tên hệ thống mv.setViewName("base/login"); mv.addObject("pd", pageData); return mv }

Trên đây là kinh nghiệm cá nhân của mình, hi vọng có thể cho các bạn tham khảo và mong các bạn có thể ủng hộ mình.

Liên kết gốc: https://blog.csdn.net/micro_hz/article/details/53157738.

Cuối cùng, bài viết về phân tích cách sử dụng của SpringMVC @RequestBody kết thúc tại đây. Nếu bạn muốn biết thêm về phân tích cách sử dụng của SpringMVC @RequestBody, vui lòng tìm kiếm bài viết CFSDN hoặc tiếp tục duyệt các bài viết liên quan. blog tương lai! .

31 4 0
qq735679552
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress