บางทีคุณอาจจำเป็นต้องรู้ว่า URL นั้นถูกแมปด้วยเช่นกันเนื่องจากฉันประสบ404เป็นเวลาหลายชั่วโมง มีตัวจัดการการร้องขอสองชนิด และBeanNameUrlHandlerMapping SimpleUrlHandlerMappingเมื่อเรากำหนดเราจะใช้servlet-mapping SimpleUrlHandlerMappingสิ่งหนึ่งที่เราจำเป็นต้องรู้คือทั้งสองร่วมกันขนย้ายทรัพย์สินส่วนกลางที่เรียกว่าที่เริ่มต้นที่alwaysUseFullPathfalse
falseนี่หมายความว่า Spring จะไม่ใช้เส้นทางแบบเต็มในการแมป URL ไปยังตัวควบคุม มันหมายความว่าอะไร? มันหมายถึงเมื่อคุณกำหนดservlet-mapping:
<servlet-mapping>
<servlet-name>viewServlet</servlet-name>
<url-pattern>/perfix/*</url-pattern>
</servlet-mapping>
ตัวจัดการจะใช้ชิ้น*ส่วนเพื่อค้นหาตัวควบคุม ตัวอย่างเช่นตัวควบคุมต่อไปนี้จะพบ404ข้อผิดพลาดเมื่อคุณร้องขอโดยใช้/perfix/api/feature/doSomething
@Controller()
@RequestMapping("/perfix/api/feature")
public class MyController {
@RequestMapping(value = "/doSomething", method = RequestMethod.GET)
@ResponseBody
public String doSomething(HttpServletRequest request) {
....
}
}
มันเป็นคู่ที่สมบูรณ์แบบใช่มั้ย 404แต่ทำไม ดังกล่าวก่อนหน้านี้ค่าเริ่มต้นของalwaysUseFullPathเป็นเท็จซึ่งหมายถึงในคำขอของคุณเพียง/api/feature/doSomethingใช้ในการค้นหาตัวควบคุมที่เกี่ยวข้อง แต่ไม่มีตัวควบคุมใส่ใจเกี่ยวกับเส้นทางนั้น คุณจำเป็นต้องมีการเปลี่ยนแปลงอย่างใดอย่างหนึ่ง URL ของคุณไป/perfix/perfix/api/feature/doSomethingหรือลบจากฐานperfix MyController@RequestingMapping