ปัญหาที่คุณกำลังเผชิญเป็นเพราะฤดูใบไม้ผลิการตีความที่ผ่านมาเป็นส่วนหนึ่งของ URI หลังจากจุด (.)ในฐานะที่เป็นส่วนขยายของแฟ้มเช่น .json หรือ .xml ดังนั้นเมื่อฤดูใบไม้ผลิพยายามแก้ไขตัวแปรพา ธ มันจะตัดทอนส่วนที่เหลือของข้อมูลหลังจากพบจุด (.) ที่ส่วนท้ายของ uri
บันทึก:สิ่งนี้จะเกิดขึ้นก็ต่อเมื่อคุณเก็บตัวแปรพา ธ ไว้ที่ส่วนท้ายของ uri
ตัวอย่างเช่นพิจารณา uri: https: //localhost/example/gallery.df/link.ar
@RestController
public class CustomController {
@GetMapping("/example/{firstValue}/{secondValue}")
public void example(@PathVariable("firstValue") String firstValue,
@PathVariable("secondValue") String secondValue) {
// ...
}
}
ใน url ข้างต้น firstValue = "gallery.df" และ secondValue = "link" บิตสุดท้ายหลังจาก ได้รับการตัดทอนเมื่อตัวแปรเส้นทางได้รับการตีความ
ดังนั้นเพื่อป้องกันสิ่งนี้มีสองวิธีที่เป็นไปได้:
1. ) การใช้การแมป regexp
ใช้ regex ที่ส่วนท้ายของการทำแผนที่
@GetMapping("/example/{firstValue}/{secondValue:.+}")
public void example(
@PathVariable("firstValue") String firstValue,
@PathVariable("secondValue") String secondValue) {
//...
}
ด้วยการใช้ + เราจะระบุค่าใด ๆ หลังจากจุดจะเป็นส่วนหนึ่งของตัวแปรเส้นทาง
2. ) การเพิ่มเครื่องหมายสแลชที่ส่วนท้ายของ @PathVariable ของเรา
@GetMapping("/example/{firstValue}/{secondValue}/")
public void example(
@PathVariable("firstValue") String firstValue,
@PathVariable("secondValue") String secondValue) {
//...
}
สิ่งนี้จะล้อมรอบตัวแปรที่สองของเราปกป้องจากพฤติกรรมเริ่มต้นของสปริง
3) โดยการแทนที่การกำหนดค่าเริ่มต้นของ webmvc ของ Spring
ฤดูใบไม้ผลิมีวิธีการที่จะแทนที่การกำหนดค่าเริ่มต้นที่ได้รับนำเข้าโดยใช้คำอธิบายประกอบ@EnableWebMvcเราสามารถปรับแต่งการตั้งค่าฤดูใบไม้ผลิ MVC ด้วยการประกาศของเราเองDefaultAnnotationHandlerMappingถั่วในบริบทการประยุกต์ใช้และการตั้งค่าของuseDefaultSuffixPatternคุณสมบัติการเท็จ ตัวอย่าง:
@Configuration
public class CustomWebConfiguration extends WebMvcConfigurationSupport {
@Bean
public RequestMappingHandlerMapping
requestMappingHandlerMapping() {
RequestMappingHandlerMapping handlerMapping
= super.requestMappingHandlerMapping();
handlerMapping.setUseSuffixPatternMatch(false);
return handlerMapping;
}
}
โปรดทราบว่าการแทนที่การกำหนดค่าเริ่มต้นนี้จะมีผลกับ URL ทั้งหมด
หมายเหตุ:ที่นี่เรากำลังขยายคลาส WebMvcConfigurationSupport เพื่อแทนที่วิธีการเริ่มต้น มีอีกวิธีหนึ่งในการแทนที่การกำหนดค่าความผิดพลาดโดยใช้อินเตอร์เฟส WebMvcConfigurer สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับการอ่านนี้: https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/servlet/config/annotation/EnableWebMvc.html