cuốn sách gpt4 ai đã làm

Giải thích chi tiết về ràng buộc tham số SpringMVC

In lại Tác giả: Người biết Thời gian cập nhật: 2024-03-13 11:24:03 26 4
mua khóa gpt4 Nike

Tổng quan

Tôi nhớ rằng khi chúng tôi cùng gỡ lỗi giao diện với các đồng nghiệp front-end, SpringMVC back-end cần nhận các tham số loại mảng, sau đó thông báo cho front-end rằng loại mảng cần được chuyển qua. Sau đó, giày trẻ em mặt trước đã vượt qua mảng, nhưng mặt sau nhận được không thành công và việc gỡ lỗi chung không thành công. Lúc đó mình chưa nghiên cứu kỹ khía cạnh này do hạn chế về thời gian nên mình đã nghĩ ra cách chuyển một chuỗi json sang front end, sau đó back end nhận chuỗi json và chuyển đổi thành chuỗi bắt buộc. đối tượng mảng. Đây rõ ràng không phải là một cách tiếp cận tốt. Chúng tôi đã không sử dụng những gì khung đã làm cho mình và nó cũng yêu cầu thêm hai lần chuyển đổi dữ liệu. Vì vậy hôm nay mình đã dành chút thời gian nghiên cứu và tổng hợp lại data bind của springMVC.

1. Tham số kiểu đơn giản

Nghĩa là, một số kiểu dữ liệu cơ bản gốc java bao gồm các lớp đóng gói và kiểu Chuỗi của chúng. Tương đối đơn giản, hãy chọn kiểu Boolean để giải thích.
Mã kiểm tra:

@RequestMapping(value = "test") @ResponseBody public Object testDataBind(@RequestParam(name = "test") Boolean test) { System.out.println(test);

Sử dụng công cụ đưa thư để gửi yêu cầu:

Đầu ra của bảng điều khiển:

đúng1

Điều này tương đối đơn giản và không có nhiều điều để nói. **Ở đây cần lưu ý rằng nếu tham số không được chú thích bằng @RequestParam thì tên của tham số mặc định test phải được sử dụng làm tên của tham số. Nếu không có chú thích thì giao diện người dùng không cần chuyển thông số này. tham số khi gửi yêu cầu http và sẽ không có lỗi nào được báo cáo. Tuy nhiên, nếu chú thích này được thêm vào và thuộc tính chú thích require = false không được đặt thì tham số này phải được chuyển, nếu không sẽ báo lỗi 400. Nếu thuộc tính tên được chỉ định trong chú thích, giao diện người dùng tên cần sử dụng giá trị của tên làm tên tham số giao diện người dùng. Nếu thuộc tính tên không được chỉ định, thì kiểm tra tên tham số sẽ được sử dụng làm tham số giao diện người dùng. tên. **Bạn có thể xác minh từng cái một.

2. Mảng/danh sách kiểu đơn giản

Có hai tình huống:

1) Nếu bạn trực tiếp sử dụng một mảng làm tham số phương thức, bạn có thể sử dụng chú thích @RequestParam để sửa đổi nó. Nếu bạn sử dụng Danh sách, bạn phải sử dụng chú thích @RequestParam để sửa đổi nó.

Mã giao diện:

@RequestMapping(value = "test") @ResponseBody public Object testDataBind(String[] test) { System.out.println(tests[0] + " " + test[1]); trả về "thành công";

Kiểu truyền tham số giao diện người dùng này cần phải tuân theo một định dạng nhất định.

  • hình thức
    Các giá trị của tên thành phần biểu mẫu phải giống nhau
name="tests" value="arony1" name="tests" value="arony2"12

người đưa thư gửi yêu cầu:

Đầu ra của bảng điều khiển:

arony1 arony21
  • ajax
    Mỗi giá trị phần tử của mảng cần được phân tách bằng dấu ",".
dữ liệu:{"tests://arony1,arony2"}1

Điều đáng lưu ý là nếu các tham số phương thức springMVC phía sau được nhận bằng cách sử dụng một mảng và giao diện người dùng sử dụng ajax để gửi yêu cầu thì các tham số chỉ có thể được chuyển theo định dạng trên, sử dụng các bài kiểm tra [0], các bài kiểm tra [1] được đề cập dưới đây là không thể truyền tham số.
người đưa thư gửi yêu cầu:

Đầu ra của bảng điều khiển:

arony1 arony21

2) Sử dụng lớp tùy chỉnh để đóng gói một mảng hoặc Danh sách, sử dụng thể hiện của lớp tùy chỉnh làm tham số phương thức và không thể sử dụng chú thích @RequestParam để sửa đổi nó.

Mã giao diện:

@RequestMapping(value = "test") @ResponseBody đối tượng công khai testDataBind(Person Person) { System.out.println(person.getTests()[0] + " " + Person.getTests()[1]); "; }

Người:

lớp công khai Person { chuỗi riêng tư [] các bài kiểm tra; chuỗi công khai [] getTests() { trả về các bài kiểm tra; } public void setTests(String[] test) { this.tests = test;
  • hình thức

Có hai hình thức để truyền giá trị

name="tests" value="arony1" name="tests" value="arony2"12 name="tests[0]" value="arony1" name="tests[1]" value="arony2"12

người đưa thư gửi yêu cầu:

Đầu ra của bảng điều khiển:

arony1 arony21
  • ajax

Ajax cũng có hai cách để truyền giá trị:

dữ liệu:{"tests"arony1,arony2"}1 dữ liệu:{"tests[0]""arony1","tests[1]"arony2"}1

Hiệu quả hoàn toàn giống như hình thức.

3. Loại tùy chỉnh

Trước tiên, hãy xác định loại Người dùng tùy chỉnh, bao gồm các thuộc tính sau và tạo các phương thức get/set cũng như các phương thức toString:

id số nguyên riêng tư; tên đăng nhập chuỗi riêng tư;12

Mã giao diện:

@RequestMapping(value = "test") @ResponseBody đối tượng công khai testDataBind(Người dùng) { System.out.println(user); trả về "thành công";

người đưa thư gửi yêu cầu:

Đầu ra của bảng điều khiển:

Người dùng{id=1, loginname='arony'}1

Như bạn có thể thấy,Các tham số có cùng tên với thuộc tính Người dùng có thể được đối tượng Người dùng chấp nhận nếu một giá trị được truyền. Nếu không có giá trị nào được truyền, giá trị mặc định sẽ được sử dụng.
Hãy thử và thêm chú thích @RequestParam cho người dùng tham số. Sử dụng người đưa thư để gửi yêu cầu và bạn sẽ thấy rằng 400 được trả lại. Vì vậy chúng ta cần hiểu ý nghĩa của chú thích @RequestParam, nó chỉ ra rằng tham số của phương thức chấp nhận tham số http. Do đó, nếu bạn sử dụng một đối tượng tùy chỉnh làm tham số thì đừng thêm @RequestParam trước, vì SpringMVC không thể chuyển đổi các tham số đã nhận thành đối tượng User khi phân tích tham số người dùng của yêu cầu http.

4. Mảng/danh sách kiểu tùy chỉnh

Lưu ý: Trong trường hợp này, chỉ có thể sử dụng một lớp tùy chỉnh để bao bọc mảng/danh sách.
Xác định một lớp tham số khác:

lớp công khai Tham số { người riêng tư[] người; người công khai[] getPerson() { người trả lại; } public void setPerson(Person[] người) { this.person = người;

Người:

lớp công khai Person { các bài kiểm tra chuỗi riêng tư; chuỗi công khai getTests() { trả về các bài kiểm tra; } public void setTests(Các bài kiểm tra chuỗi) { this.tests = test;

Mã giao diện:

@RequestMapping(value = "test") @ResponseBody đối tượng công khai testDataBind(Tham số tham số) { System.out.println(parameter.getPerson()[0].getTests() + " " + tham số.getPerson()[1]. getTests()); trả về "thành công";
  • tham số biểu mẫu
name="person[0].tests" value="arony1" name="person[1].tests" value="arony2"12
  • truyền tham số ajax
data:{"person[0].tests:"arony1","person[1].tests"arony2"}1

người đưa thư gửi yêu cầu:

Đầu ra của bảng điều khiển:

arony1 arony21

5.Bản đồ<Chuỗi, kiểu cơ bản>

Tương tự như trên Trong trường hợp này, chỉ có thể sử dụng một lớp tùy chỉnh để bao bọc bản đồ.

tham số:

lớp công khai Tham số { Bản đồ riêng bản đồ; Bản đồ công khai getMap() { return map; } public void setMap(Map map) { this.map = map;

Mã giao diện:

@RequestMapping(value = "test") @ResponseBody đối tượng công khai testDataBind(Tham số tham số) { tham số.getMap().forEach((key, value) -> { System.out.println(key + " " + value); } ); trả về "thành công";

Định dạng truyền tham số mặt trước:

  • hình thức
name="map[key1]" value="arony1" name="map[key2]" value="arony2" hoặc name="map.key1" value="arony1" name="map.key2" value="arony2 "12345
  • ajax
data:{"map[key1]://arony1","map[key2]://arony2"} hoặc dữ liệu:{"map.key1://arony1","map.key2"arony2"}123

người đưa thư gửi yêu cầu:

Đầu ra của bảng điều khiển:

key1 arony1 key2 arony212

6.Bản đồ<Chuỗi, lớp tùy chỉnh>

Nó rất giống với 5.
tham số:

lớp công khai Tham số { Bản đồ riêng tư bản đồ; Bản đồ công khai getMap() { return map; } public void setMap(Map map) { this.map = map;

Người:

lớp công khai Person { các bài kiểm tra chuỗi riêng tư; chuỗi công khai getTests() { trả về các bài kiểm tra; } public void setTests(Các bài kiểm tra chuỗi) { this.tests = test;

Mã giao diện:

@RequestMapping(value = "test") @ResponseBody đối tượng công khai testDataBind(Tham số tham số) { tham số.getMap().forEach((key, value) -> { System.out.println(key + " " + value.getTests( )); }); trả về "thành công";

Định dạng truyền tham số mặt trước:

  • hình thức
name="map[key1].tests" value="arony1" name="map[key2].test2" value="arony2"12

Lưu ý ở đây là không thể truyền các giá trị như name="map.key1.tests" value="arony1". Dấu ngoặc vuông là bắt buộc.

  • ajax
data={"map[key1].tests://arony1","map[key2].test2"arony2"}1

Dấu ngoặc vuông cũng phải được sử dụng ở đây.

Sử dụng người đưa thư để gửi yêu cầu:

Đầu ra của bảng điều khiển:

key1 arony1 key2 arony212

Tóm tắt

Liên kết tham số SpringMVC ở trên có thể được tóm tắt như hình sau:

Trong đó, Bản đồ<Chuỗi, ①> Giao diện người dùng cũng có thể sử dụng "." thay vì dấu ngoặc vuông.

26 4 0
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