Spring MVC @PathVariable ถูกตัดทอน


142

ฉันมีตัวควบคุมที่ให้การเข้าถึงข้อมูลสงบ:

@RequestMapping(method = RequestMethod.GET, value = Routes.BLAH_GET + "/{blahName}")
public ModelAndView getBlah(@PathVariable String blahName, HttpServletRequest request,
                            HttpServletResponse response) {

ปัญหาที่ฉันพบคือถ้าฉันไปที่เซิร์ฟเวอร์ด้วยตัวแปรพา ธ ที่มีอักขระพิเศษมันจะถูกตัดทอน ตัวอย่างเช่น: http: // localhost: 8080 / blah-server / blah / get / blah2010.08.19-02: 25: 47

พารามิเตอร์ blahName จะเป็น blah2010.08

อย่างไรก็ตามการเรียกร้องให้ request.getRequestURI () มีข้อมูลทั้งหมดที่ส่งผ่าน

มีความคิดใดที่จะป้องกันไม่ให้ Spring ตัดทอน @PathVariable


ดูเหมือนว่านี้ได้รับการแก้ไขในฤดูใบไม้ผลิ 3.2-M2: ดูอนุญาตให้เส้นทางนามสกุลไฟล์ที่ถูกต้องสำหรับการเจรจาต่อรองเนื้อหาที่จะระบุและเอกสารประกอบ
Arjan

คำตอบ:


149

ลองใช้นิพจน์ทั่วไปสำหรับ@RequestMappingอาร์กิวเมนต์:

RequestMapping(method = RequestMethod.GET, value = Routes.BLAH_GET + "/{blahName:.+}")

1
ขอบคุณสำหรับคำตอบนี้ช่วยฉันแก้กรณีที่ชื่อผู้ใช้ถูกตัดออกไป .. (-: ตัวเลือกอื่นที่มี 'useDefaultSuffixPattern' ไม่ใช่ตัวเลือกเพราะเราใช้ @ ฤดูใบไม้ผลิชั้นเรียนการกำหนดค่าแทน XML
evandongen

3
วิธีนี้ใช้ได้ผล แต่ลำไส้ใหญ่ใน Regex มีความสำคัญอย่างไร
โนอาห์ Yetter

6
โนอาห์ฉันไม่ได้ใช้มันมานาน แต่ฉันคิดว่าเครื่องหมายโคลอนจะแยกนิพจน์ปกติออกจากชื่ออาร์กิวเมนต์เพื่อผูกเข้ากับ
earldouglas

3
เรามี problam /item/user@abc.com ที่คล้ายกันอะไรก็ได้หลังจากที่ @ ถูกตัดทอนนี่ก็แก้ไขได้ด้วยการเพิ่มอีกหนึ่งเฉือน /item/user@abc.com/
Titi Wangsa bin Damhore

59

นี้น่าจะมีความสัมพันธ์อย่างใกล้ชิดกับSPR-6164 โดยสังเขปเฟรมเวิร์กพยายามใช้ smarts บางตัวกับการตีความ URI ลบสิ่งที่คิดว่าเป็นนามสกุลไฟล์ นี้จะมีผลกระทบของการเปลี่ยนblah2010.08.19-02:25:47เป็นblah2010.08เพราะมันคิดว่า.19-02:25:47เป็นไฟล์นามสกุล

ตามที่อธิบายในประเด็นที่เชื่อมโยงคุณสามารถปิดการทำงานนี้ด้วยการประกาศของคุณเองDefaultAnnotationHandlerMappingถั่วในบริบท app และการตั้งค่าของคุณสมบัติการuseDefaultSuffixPattern falseสิ่งนี้จะลบล้างพฤติกรรมเริ่มต้นและหยุดการหลอกลวงข้อมูลของคุณ


3
การเปิดใช้การเจรจาต่อรองเนื้อหาแบบขยายเป็นค่าเริ่มต้นดูเหมือนจะเป็นตัวเลือกที่แปลก มีระบบจำนวนเท่าใดที่เปิดเผยทรัพยากรเดียวกันในรูปแบบที่แตกต่างกันในทางปฏิบัติ
Affe

ฉันลองเช้านี้และยังคงมีตัวแปรพา ธ ที่ถูกตัดทอน
phogel

30
+1 สำหรับคำตอบที่ดีและสำหรับการใช้วลี "ทำร้ายข้อมูลของคุณ"
Chris Thompson

11
สำหรับผู้ใช้ Spring 3.1 - หากคุณใช้ใหม่RequestMappingHandlerMappingแทนคุณสมบัติที่จะตั้งค่าเป็นuseSuffixPatternMatch(รวมถึงfalse) @Ted: ปัญหาที่เชื่อมโยงระบุว่าใน 3.2 พวกเขาหวังว่าจะเพิ่มการควบคุมอีกเล็กน้อยดังนั้นจึงไม่จำเป็นต้องทั้งหมดหรือไม่มีอะไรเลย
Nick

2
ใน Spring 4.2 การกำหนดค่าจะง่ายกว่าเล็กน้อย เราใช้คลาสการกำหนดค่า Java และขยายWebMvcConfigurationSupportซึ่งให้เบ็ดง่ายๆ: public void configurePathMatch(PathMatchConfigurer configurer)- เพียงแค่แทนที่และตั้งค่าเส้นทางที่ตรงกับที่คุณต้องการ
pmckeown

31

Spring พิจารณาว่าอะไรก็ตามที่อยู่หลังจุดสุดท้ายคือนามสกุลไฟล์เช่น.jsonหรือ.xmlและตัดให้สั้นลงเพื่อดึงพารามิเตอร์ของคุณ

ดังนั้นถ้าคุณมี/{blahName}:

  • /param, /param.json, /param.xmlหรือ/param.anythingจะมีผลในพารามิเตอร์ที่มีค่าparam
  • /param.value.json, /param.value.xmlหรือ/param.value.anythingจะมีผลในพารามิเตอร์ที่มีค่าparam.value

หากคุณเปลี่ยนการจับคู่ของคุณ/{blahName:.+}เป็นที่แนะนำจุดใด ๆ รวมถึงจุดสุดท้ายจะถูกพิจารณาว่าเป็นส่วนหนึ่งของพารามิเตอร์ของคุณ:

  • /param จะส่งผลให้พารามิเตอร์มีค่า param
  • /param.json จะส่งผลให้พารามิเตอร์มีค่า param.json
  • /param.xml จะส่งผลให้พารามิเตอร์มีค่า param.xml
  • /param.anything จะส่งผลให้พารามิเตอร์มีค่า param.anything
  • /param.value.json จะส่งผลให้พารามิเตอร์มีค่า param.value.json
  • ...

หากคุณไม่สนใจการรู้จำส่วนขยายคุณสามารถปิดการใช้งานได้ด้วยการเอาชนะmvc:annotation-drivenautomagic:

<bean id="handlerMapping"
      class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
    <property name="contentNegotiationManager" ref="contentNegotiationManager"/>
    <property name="useSuffixPatternMatch" value="false"/>
</bean>

ดังนั้นถ้าคุณมี/{blahName}:

  • /param, /param.json, /param.xmlหรือ/param.anythingจะมีผลในพารามิเตอร์ที่มีค่าparam
  • /param.value.json, /param.value.xmlหรือ/param.value.anythingจะมีผลในพารามิเตอร์ที่มีค่าparam.value

หมายเหตุ: /something.{blahName}ความแตกต่างจากการตั้งค่าเริ่มต้นจะมองเห็นได้เฉพาะถ้าคุณมีการทำแผนที่เช่น ดูปัญหาโครงการ Resthub

หากคุณต้องการรักษาการจัดการส่วนขยายไว้ตั้งแต่ Spring 3.2 คุณสามารถตั้งค่าคุณสมบัติ useRegisteredSuffixPatternMatch ของ RequestMappingHandlerMapping bean เพื่อให้เปิดใช้งานการจดจำ suffixPattern แต่ จำกัด เฉพาะส่วนขยายที่ลงทะเบียนไว้

ที่นี่คุณกำหนดเฉพาะส่วนขยาย json และ xml:

<bean id="handlerMapping"
      class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
    <property name="contentNegotiationManager" ref="contentNegotiationManager"/>
    <property name="useRegisteredSuffixPatternMatch" value="true"/>
</bean>

<bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
    <property name="favorPathExtension" value="false"/>
    <property name="favorParameter" value="true"/>
    <property name="mediaTypes">
        <value>
            json=application/json
            xml=application/xml
        </value>
    </property>
</bean>

โปรดทราบว่า mvc: ขับเคลื่อนด้วยคำอธิบายประกอบยอมรับตอนนี้เป็นตัวเลือก contentNegotiation เพื่อให้ถั่วที่กำหนดเอง แต่คุณสมบัติของ RequestMappingHandlerMapping จะต้องเปลี่ยนเป็นจริง (เท็จเริ่มต้น) (cf. https://jira.springsource.org/browse/SPR-7632 )

ด้วยเหตุผลดังกล่าวคุณยังต้องแทนที่การกำหนดค่าที่ขับเคลื่อนด้วยคำอธิบายประกอบ mvc: ทั้งหมด ผมเปิดตั๋วไปฤดูใบไม้ผลิที่จะถามหา RequestMappingHandlerMapping ที่กำหนดเอง: https://jira.springsource.org/browse/SPR-11253 กรุณาลงคะแนนถ้าคุณสนใจ

ในขณะที่การเอาชนะโปรดระมัดระวังในการพิจารณาการจัดการ Execution แบบกำหนดเองด้วย มิฉะนั้นการแมปข้อยกเว้นที่กำหนดเองทั้งหมดของคุณจะล้มเหลว คุณจะต้องใช้ messageCoverters ใหม่ด้วย list bean:

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean" />

<util:list id="messageConverters">
    <bean class="your.custom.message.converter.IfAny"></bean>
    <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"></bean>
    <bean class="org.springframework.http.converter.StringHttpMessageConverter"></bean>
    <bean class="org.springframework.http.converter.ResourceHttpMessageConverter"></bean>
    <bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter"></bean>
    <bean class="org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter"></bean>
    <bean class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter"></bean>
    <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean>
</util:list>

<bean name="exceptionHandlerExceptionResolver"
      class="org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver">
    <property name="order" value="0"/>
    <property name="messageConverters" ref="messageConverters"/>
</bean>

<bean name="handlerAdapter"
      class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
    <property name="webBindingInitializer">
        <bean class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
            <property name="conversionService" ref="conversionService" />
            <property name="validator" ref="validator" />
        </bean>
    </property>
    <property name="messageConverters" ref="messageConverters"/>
</bean>

<bean id="handlerMapping"
      class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
</bean>

ฉันนำไปใช้ในResthub project แบบโอเพ่นซอร์สที่ฉันเป็นส่วนหนึ่งของชุดการทดสอบในหัวข้อเหล่านี้: ดูhttps://github.com/resthub/resthub-spring-stack/pull/219/filesและhttps: // github.com/resthub/resthub-spring-stack/issues/217


16

ทุกอย่างหลังจากจุดสุดท้ายถูกตีความว่าเป็นนามสกุลไฟล์และตัดเป็นค่าเริ่มต้น
ในฤดูใบไม้ผลิ config xml ของคุณคุณสามารถเพิ่มDefaultAnnotationHandlerMappingและตั้งค่าuseDefaultSuffixPatternเป็นfalse(ค่าเริ่มต้นคือtrue)

ดังนั้นเปิด Spring xml ของคุณmvc-config.xml(หรือเรียกว่า) และเพิ่ม

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
    <property name="useDefaultSuffixPattern" value="false" />
</bean>

ตอนนี้@PathVariable blahName(และอื่น ๆ ทั้งหมดของคุณ) ควรมีชื่อเต็มรวมถึงจุดทั้งหมด

แก้ไข: นี่คือลิงค์ไปยัง api สปริง


ฉันยังไม่ได้ลอง แต่คนอื่นอ้างว่าคุณต้องลบออก<mvc:annotation-driven />ถ้ามี
Arjan

7

ฉันพบปัญหาเดียวกันและการตั้งค่าคุณสมบัติเป็นเท็จไม่ได้ช่วยฉันเช่นกัน อย่างไรก็ตามAPI กล่าวว่า :

โปรดทราบว่าเส้นทางที่มีส่วนต่อท้าย ".xxx" หรือลงท้ายด้วย "/" แล้วจะไม่ถูกแปลงโดยใช้รูปแบบคำต่อท้ายเริ่มต้นในทุกกรณี

ฉันลองเพิ่ม "/ end" ใน URL ที่สงบเงียบของฉันและปัญหาหายไป ฉันไม่ได้โปรดใช้วิธีแก้ปัญหา แต่มันได้ผล

BTW ฉันไม่รู้ว่านักออกแบบสปริงคิดอย่างไรเมื่อพวกเขาเพิ่ม "คุณสมบัติ" นี้แล้วเปิดใช้งานตามค่าเริ่มต้น ควรลบ IMHO


ฉันเห็นด้วย. ฉันเพิ่งได้รับสิ่งนี้
llambda

7

การใช้คลาสการกำหนดค่า Java ที่ถูกต้อง:

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter
{

    @Override
    public void configureContentNegotiation(ContentNegotiationConfigurer configurer)
    {
        configurer.favorPathExtension(false);
    }

    @Override
    public void configurePathMatch(PathMatchConfigurer configurer)
    {
        configurer.setUseSuffixPatternMatch(false);
    }
}

มันใช้งานได้ดีสำหรับฉัน วิ่งบน Tomcat Spring เวอร์ชั่น 4.3.14
เดฟ

4

ฉันแก้ไขโดยแฮ็คนี้

1) เพิ่ม HttpServletRequest ใน @PathVariable เช่นด้านล่าง

 @PathVariable("requestParam") String requestParam, HttpServletRequest request) throws Exception { 

2) รับ URL โดยตรง (ในระดับนี้ไม่มีการตัดทอน) ในคำขอ

request.getPathInfo() 

Spring MVC @PathVariable ที่มีจุด (.) กำลังถูกตัดทอน


3

ฉันเพิ่งพบปัญหานี้และวิธีแก้ปัญหาที่นี่ไม่ได้ผลตามที่คาดไว้

ฉันขอแนะนำให้ใช้นิพจน์ SpEL และการแมปหลายรายการเช่น

@RequestMapping(method = RequestMethod.GET, 
    value = {Routes.BLAH_GET + "/{blahName:.+}", 
             Routes.BLAH_GET + "/{blahName}/"})

3

ปัญหานามสกุลไฟล์มีอยู่เฉพาะในกรณีที่พารามิเตอร์อยู่ในส่วนสุดท้ายของ URL เปลี่ยนแปลง

@RequestMapping(method = RequestMethod.GET, value = Routes.BLAH_GET + "/{blahName}")

ถึง

@RequestMapping(
   method = RequestMethod.GET, value = Routes.BLAH_GET + "/{blahName}/safe")

และทุกอย่างจะดีขึ้นอีกครั้ง -


3

หากคุณสามารถแก้ไขที่อยู่ที่ส่งคำขอไปได้การแก้ไขแบบง่ายก็คือการเพิ่มเครื่องหมายสแลชต่อท้ายไปยังพวกเขา (และใน@RequestMappingค่า):

/path/{variable}/

ดังนั้นแผนที่จะมีลักษณะดังนี้:

RequestMapping(method = RequestMethod.GET, value = Routes.BLAH_GET + "/{blahName}/")

ดูเพิ่มเติมฤดูใบไม้ผลิ MVC @PathVariable ด้วยจุด (.) จะได้รับการตัดทอน


3
//in your xml dispatcher  add this property to your default annotation mapper bean as follow
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
    <property name="alwaysUseFullPath" value="true"></property>
</bean>       

3

การเพิ่ม ":. +" ใช้งานได้สำหรับฉัน แต่ไม่ได้จนกว่าฉันจะลบวงเล็บปีกกาด้านนอกออก

value = {"/username/{id:.+}"} ไม่ทำงาน

value = "/username/{id:.+}" โรงงาน

หวังว่าฉันช่วยใครบางคน:]


2

โซลูชันการกำหนดค่าบน Java เพื่อป้องกันการถูกตัดทอน (ใช้คลาสที่ไม่สนับสนุน):

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;

@Configuration
public class PolRepWebConfig extends WebMvcConfigurationSupport {

    @Override
    @Bean
    public RequestMappingHandlerMapping requestMappingHandlerMapping() {
        final RequestMappingHandlerMapping handlerMapping = super
                .requestMappingHandlerMapping();
        // disable the truncation after .
        handlerMapping.setUseSuffixPatternMatch(false);
        // disable the truncation after ;
        handlerMapping.setRemoveSemicolonContent(false);
        return handlerMapping;
    }
}

ที่มา: http://www.javacodegeeks.com/2013/01/01/spring-mvc-customizing-requestmappinghandlermapping.html

UPDATE:

ฉันรู้ว่ามีปัญหาบางอย่างเกี่ยวกับการกำหนดค่าอัตโนมัติของ Spring Boot เมื่อฉันใช้วิธีการข้างต้น (การกำหนดค่าอัตโนมัติบางอย่างไม่มีประสิทธิภาพ)

ฉันเริ่มใช้BeanPostProcessorวิธีนี้แทน ดูเหมือนว่าจะทำงานได้ดีขึ้น

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;

public class MyBeanPostProcessor implements BeanPostProcessor {
    private static final Logger logger = LoggerFactory
            .getLogger(MyBeanPostProcessor.class);

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName)
            throws BeansException {
        return bean;
    }

    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName)
            throws BeansException {
        if (bean instanceof RequestMappingHandlerMapping) {
            setRemoveSemicolonContent((RequestMappingHandlerMapping) bean,
                    beanName);
            setUseSuffixPatternMatch((RequestMappingHandlerMapping) bean,
                    beanName);
        }
        return bean;
    }

    private void setRemoveSemicolonContent(
            RequestMappingHandlerMapping requestMappingHandlerMapping,
            String beanName) {
        logger.info(
                "Setting 'RemoveSemicolonContent' on 'RequestMappingHandlerMapping'-bean to false. Bean name: {}",
                beanName);
        requestMappingHandlerMapping.setRemoveSemicolonContent(false);
    }

    private void setUseSuffixPatternMatch(
            RequestMappingHandlerMapping requestMappingHandlerMapping,
            String beanName) {
        logger.info(
                "Setting 'UseSuffixPatternMatch' on 'RequestMappingHandlerMapping'-bean to false. Bean name: {}",
                beanName);
        requestMappingHandlerMapping.setUseSuffixPatternMatch(false);
    }
}

แรงบันดาลใจจาก: http://ronaldxq.blogspot.com/2014/10/spring-mvc-setting-alwaysusefullpath-on.html


2

หากคุณแน่ใจว่าข้อความของคุณจะไม่ตรงกับส่วนขยายเริ่มต้นใด ๆ คุณสามารถใช้รหัสด้านล่าง:

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
        configurer.setUseRegisteredSuffixPatternMatch(true);
    }
}

1

โซลูชันที่ต้องการของฉันเพื่อป้องกัน Spring MVC @PathVariable ที่จะถูกตัดทอนคือการเพิ่มเครื่องหมายสแลชท้ายท้ายตัวแปรพา ธ

ตัวอย่างเช่น:

@RequestMapping(value ="/email/{email}/")

ดังนั้นคำขอจะมีลักษณะดังนี้:

http://localhost:8080/api/email/test@test.com/

1

ปัญหาที่คุณกำลังเผชิญเป็นเพราะฤดูใบไม้ผลิการตีความที่ผ่านมาเป็นส่วนหนึ่งของ 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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.