স্প্রিং এমভিসি @ প্যাথভ্যারেবল কেটে দেওয়া হচ্ছে


142

আমার কাছে এমন একটি নিয়ামক রয়েছে যা তথ্যগুলিতে বিশ্রামের অ্যাক্সেস সরবরাহ করে:

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

আমি যে সমস্যার মুখোমুখি হচ্ছি তা হ'ল যদি আমি কোনও বিশেষ অক্ষর সহ একটি পাথ ভেরিয়েবলের সাথে সার্ভারটি আঘাত করি তবে এটি কেটে যাবে। উদাহরণস্বরূপ: http: // লোকালহোস্ট: 8080 / ব্লাহ-সার্ভার / ব্লাহ / পাবেন / ব্লাহ 2010.08.19-02: 25: 47

BlaName প্যারামিটারটি blah2010.08 হবে

তবে, কল টু রিকোয়েস্ট.জিটেকুয়েস্টুরি () এর মধ্যে পাস করা সমস্ত তথ্য রয়েছে।

@ প্যাথভ্যারেবল কে কাটা থেকে বসন্তকে কীভাবে রোধ করা যায়?


উত্তর:


149

@RequestMappingযুক্তিটির জন্য একটি নিয়মিত অভিব্যক্তি চেষ্টা করুন :

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

1
উত্তরের জন্য ধন্যবাদ, এটি আমাকে এমন একটি ক্ষেত্রে সমাধান করতে সহায়তা করেছে যেখানে ব্যবহারকারীর নামগুলি কোনওভাবে ছাঁটা হয়েছে .. (-: 'UseDefaultSuffixPattern' সহ অন্যান্য বিকল্প কোনও বিকল্প ছিল না কারণ আমরা এক্সএমএল-এর পরিবর্তে @ কনফিগারেশন স্প্রিং ক্লাস ব্যবহার করছি।
ইভানডোনজেন

3
এটি কাজ করে তবে রেজেজেসে কোলনের তাত্পর্যটি কী?
নোয়া ইয়েটার

6
নোহ, আমি এটি একটি দীর্ঘ সময় ব্যবহার করি নি, তবে আমার কাছে মনে হয় কোলন নিয়মিত প্রকাশটি এটি যুক্ত করে যুক্তির নাম থেকে আলাদা করে দেয় separa
আর্লডগ্লাস

3
আমাদের অনুরূপ প্রোব্লাম /item/user@abc.com ছিল, @ কেটে যাওয়ার পরে যে কোনও কিছুই, এটি আরও একটি স্ল্যাশ /item/user@abc.com/ যোগ করে সমাধান করা হয়েছিল
তিতি ওয়াংসা বিন দামহোর

59

এটি সম্ভবত এসপিআর -6164 এর সাথে ঘনিষ্ঠভাবে সম্পর্কিত । সংক্ষেপে, ফ্রেমওয়ার্কটি ইউআরআই ব্যাখ্যায় কিছু স্মার্ট প্রয়োগ করার চেষ্টা করে যা ফাইল এক্সটেনশান বলে মনে করে তা সরিয়ে দেয়। এতে রূপান্তরিত blah2010.08.19-02:25:47হওয়ার প্রভাব পড়বে blah2010.08, কারণ এটি মনে করে যে এটি .19-02:25:47ফাইলের একটি এক্সটেনশান।

লিঙ্কযুক্ত ইস্যুতে বর্ণিত হিসাবে, আপনি DefaultAnnotationHandlerMappingঅ্যাপ প্রসঙ্গে আপনার নিজস্ব শিম ঘোষণা করে এবং এর useDefaultSuffixPatternসম্পত্তি সেট করে এই আচরণটি অক্ষম করতে পারেন false। এটি ডিফল্ট আচরণকে ওভাররাইড করবে এবং এটি আপনার ডেটা নিয়ে শ্লীলতাহানি বন্ধ করবে।


3
ডিফল্টরূপে এক্সটেনশন ভিত্তিক সামগ্রীর আলোচনার বিষয়বস্তু চালু করা এমন অদ্ভুত পছন্দ বলে মনে হয়। বাস্তবে বাস্তবে কতগুলি সিস্টেম বিভিন্ন ফর্ম্যাটে একই সংস্থানটি প্রকাশ করে?
এফ

আমি সকালে এটি চেষ্টা করেছি এবং এখনও পথের ভেরিয়েবলগুলি কেটে ফেলেছি।
ফোগেল

30
একটি দুর্দান্ত উত্তরের জন্য +1 এবং এছাড়াও "আপনার ডেটা নিয়ে শ্লীলতাহান করছেন" এই বাক্যাংশটি ব্যবহার করার জন্য
ক্রিস থম্পসন

11
স্প্রিংয়ের ৩.১ ব্যবহারকারীর জন্য - আপনি যদি নতুন RequestMappingHandlerMappingপরিবর্তে ব্যবহার করছেন তবে সেট করার সম্পত্তিটি useSuffixPatternMatch(এছাড়াও false)। @ টেড: লিঙ্কযুক্ত ইস্যুতে উল্লেখ করা হয়েছে যে ৩.২-তে তারা আরও কিছুটা নিয়ন্ত্রণ যুক্ত করার আশাবাদী যাতে এটি সর্বদাই বা কিছুই না হয়।
নিক

2
বসন্ত ৪.২ এ কনফিগার করা কিছুটা সহজ। আমরা জাভা কনফিগারেশন ক্লাস ব্যবহার করি এবং এগুলি প্রসারিত করি WebMvcConfigurationSupportযা একটি সহজ হুক সরবরাহ করে: public void configurePathMatch(PathMatchConfigurer configurer)- কেবল সেটিকে ওভাররাইড করে এবং আপনার পছন্দ অনুসারে কীভাবে মেলে সেই পথটি সেট আপ করুন।
অপরাহ্ন জনপদে

31

স্প্রিং বিবেচনা করে যে শেষ বিন্দুটির পিছনে যে কোনও কিছুই ফাইল এক্সটেনশন যেমন .jsonবা .xmlআপনার পরামিতিটি পুনরুদ্ধার করতে এটি কেটে ফেলা হয়।

সুতরাং আপনার যদি /{blahName}:

  • /param, /param.json, /param.xmlবা /param.anythingমান সহ কোনো PARAM পরিণাম ডেকে আনবে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-drivenস্বয়ংচালিত ওভাররাইড করে এটি অক্ষম করতে পারেন :

<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
  • /param.value.json, /param.value.xmlবা /param.value.anythingমান সহ একটি পরম ফলাফলparam.value

দ্রষ্টব্য: ডিফল্ট কনফিগারেশন থেকে পার্থক্য কেবলমাত্র আপনার কাছে ম্যাপিংয়ের মতো থাকলেই দৃশ্যমান /something.{blahName}। দেখুন Resthub প্রকল্পের ইস্যু

যদি আপনি এক্সটেনশান পরিচালনা রাখতে চান তবে বসন্ত 2.২ থেকে আপনি প্রত্যয়প্যাটার্নের স্বীকৃতি সক্রিয় রাখতে তবে নিবন্ধিত এক্সটেনশনের মধ্যে সীমাবদ্ধ রাখতে অনুরোধম্যাপিংহ্যান্ডলারম্যাপিং শিমের রেকর্ডার্ডসফিক্সপ্যাটার্নম্যাচ সম্পত্তিটিও সেট করতে পারেন।

এখানে আপনি কেবল জেসন এবং এক্সএমএল এক্সটেনশানগুলি সংজ্ঞায়িত করেছেন:

<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>

নোট করুন যে এমভিসি: টিকাটি চালিত এখন একটি কাস্টম শিম সরবরাহ করার জন্য একটি বিষয়বহির্ভূত বিকল্প গ্রহণ করে তবে অনুরোধম্যাপিংহ্যান্ডলারম্যাপিংয়ের সম্পত্তিটি সত্য (ডিফল্ট মিথ্যা) হিসাবে পরিবর্তন করতে হবে (সিএফ। Https://jira.springsource.org/browse/SPR-7632 )।

যে কারণে, আপনাকে এখনও সমস্ত এমভিসি: টিকা-চালিত কনফিগারেশন ওভাররাইড করতে হবে। আমি একটি কাস্টম অনুরোধম্যাপিংহ্যান্ডলারম্যাপিং: https://jira.springsource.org/browse/SPR-11253 জিজ্ঞাসা করার জন্য স্প্রিংয়ে একটি টিকিট খুললাম । আপনি যদি আগ্রহী হন দয়া করে ভোট দিন।

ওভাররাইড করার সময়, কাস্টম এক্সিকিউশন ম্যানেজমেন্ট ওভাররাইডকেও বিবেচনা করতে সাবধান হন। অন্যথায়, আপনার সমস্ত কাস্টম ব্যতিক্রম ম্যাপিং ব্যর্থ হবে। আপনাকে একটি তালিকা বিন সহ বার্তাপ্রসূচকদের পুনরায় ব্যবহার করতে হবে:

<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>

আমি বাস্তবায়িত হয়েছি, ওপেন সোর্স প্রকল্পে রিসথুব আমি যার অংশ, এই বিষয়গুলির উপর পরীক্ষার একটি সেট: https://github.com/resthub/resthub-spring-stack/pull/219/files এবং https: // দেখুন github.com/resthub/resthub-spring-stack/issues/217


16

সর্বশেষ ডটের পরে সমস্ত কিছুই ফাইল এক্সটেনশন হিসাবে ব্যাখ্যা করা হয় এবং ডিফল্টরূপে কেটে যায়।
আপনার বসন্তের কনফিগারেশন এক্সএমএলে আপনি যুক্ত করতে পারেন DefaultAnnotationHandlerMappingএবং সেট useDefaultSuffixPatternকরতে পারেন false(ডিফল্ট হয় true)।

সুতরাং আপনার বসন্তের এক্সএমএল mvc-config.xml(বা এটি বলা হয়) খুলুন এবং যুক্ত করুন

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

এখন আপনার @PathVariable blahName(এবং সমস্ত অন্যান্যও) সমস্ত বিন্দু সহ পুরো নাম থাকা উচিত।

সম্পাদনা: এখানে বসন্ত এপিআই-র একটি লিঙ্ক is


আমি চেষ্টা করিনি, তবে অন্যরাও দাবি করে যে আপনার <mvc:annotation-driven />যদি প্রযোজ্য হয় তবে অপসারণেরও দরকার ।
আরজান

7

আমিও একই ইস্যুতে দৌড়েছি, এবং সম্পত্তিটিকে মিথ্যা হিসাবে সেট করা আমার কোনও কাজে আসেনি। তবে, এপিআই বলছে :

নোট করুন যে "" .xxx "প্রত্যয় অন্তর্ভুক্ত বা ইতিমধ্যে" / "সমাপ্ত পাথগুলি কোনও অবস্থাতেই ডিফল্ট প্রত্যয় প্যাটার্ন ব্যবহার করে রূপান্তরিত হবে না।

আমি আমার RESTful URL টিতে "/ শেষ" যুক্ত করার চেষ্টা করেছি এবং সমস্যাটি চলে গেল। আমি দয়া করে সমাধানটির সাথে নেই, তবে এটি কার্যকর হয়েছে।

বিটিডাব্লু, আমি জানি না যে তারা "এই বৈশিষ্ট্যটি" যুক্ত করার পরে স্প্রিং ডিজাইনাররা কী ভাবছিল এবং এটি ডিফল্টরূপে চালু করে। আইএমএইচও, এটি সরানো উচিত।


আমি রাজী. আমি সম্প্রতি এই দ্বারা বিট ছিল।
llambda

7

সঠিক জাভা কনফিগারেশন ক্লাস ব্যবহার করে:

@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);
    }
}

এটি আমার জন্য কাজ করে মহান। টমক্যাট স্প্রিং সংস্করণে চলছে 4.3.14
ডেভ

4

আমি এই হ্যাক দ্বারা সমাধান

1) নীচের মত @PATVariable এ এইচটিটিপি সার্ভেলকুইয়েস্ট যুক্ত হয়েছে

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

2) অনুরোধে ইউআরএল সরাসরি পান (এই স্তরে কোনও ছাঁটাই করা হবে না)

request.getPathInfo() 

স্প্রিং এমভিসি @ প্যাট ভার্ভেয়েবল সহ ডট (।) কেটে ফেলা হচ্ছে


3

আমি কেবল এটির মধ্যে দৌড়েছি এবং এখানে সমাধানগুলি সাধারণত আমার প্রত্যাশার মতো কার্যকর হয়নি।

আমি একটি স্পেল এক্সপ্রেশন এবং একাধিক ম্যাপিং ব্যবহার করার পরামর্শ দিচ্ছি, যেমন

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

3

প্যারামিটারটি ইউআরএলের শেষ অংশে থাকলে ফাইল এক্সটেনশন সমস্যাটি উপস্থিত থাকে। পরিবর্তন

@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}/")

আরও দেখুন স্প্রিং এমভিসি @ প্যাট ভার্ভেয়েবল সহ ডট (।) কেটে ফেলা হচ্ছে



3

":। +" যোগ করার জন্য আমার পক্ষে কাজ হয়েছিল তবে আমি বাইরের কোঁকড়ানো বন্ধনীগুলি সরিয়ে না দেওয়া পর্যন্ত নয়।

value = {"/username/{id:.+}"} কাজ হয়নি

value = "/username/{id:.+}" কাজ

আশা করি আমি কাউকে সাহায্য করেছি:]


2

কাটা রোধ করার জন্য জাভা ভিত্তিক কনফিগারেশন সমাধান (একটি অবহিত শ্রেণি ব্যবহার করে):

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/spring-mvc-customizing-questmappinghandlermapping.html

হালনাগাদ:

আমি উপরের পদ্ধতিটি ব্যবহার করার সময় স্প্রিং বুট অটো-কনফিগারেশনে কিছু সমস্যা হয়েছে বুঝতে পেরেছি (কিছু অটো-কনফিগারেশন কার্যকর হয় না)।

পরিবর্তে, আমি 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

কাটা কাটা পেতে স্প্রিং এমভিসি @ প্যাথ ভেরিয়েবলকে প্রতিরোধ করার জন্য আমার পছন্দসই সমাধানটি হল পথের পরিবর্তনশীলটির শেষে ট্রেলিং স্ল্যাশ যুক্ত করা।

উদাহরণ স্বরূপ:

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

সুতরাং, অনুরোধটি দেখতে পাবেন:

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

1

সমস্যা হল আপনি সম্মুখীন হচ্ছে কারণে বসন্ত ব্যাখ্যা গত URI অংশ পর ডট (।) হিসেবে ফাইল এক্সটেনশন .json বা .xml মত। সুতরাং যখন বসন্ত পথ চলকটি সমাধান করার চেষ্টা করে তখন ইউরির শেষে কোনও বিন্দু (।) এর মুখোমুখি হওয়ার পরে এটি বাকী ডেটা কেবল কাটা যায়। বিঃদ্রঃ: এছাড়াও আপনি কেবল ইউরির শেষে পথ পরিবর্তনশীল রাখলে এটি ঘটে।

উদাহরণস্বরূপ ইউরি বিবেচনা করুন: 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) {
        // ...  
    }
}

উপরের ইউআরএল ফার্স্টভ্যালু = "গ্যালারী.ডিএফ" এবং সেকেন্ডভ্যালু = "লিঙ্ক" এ, এর পরে শেষ বিট। পাথের ভেরিয়েবলটি ব্যাখ্যা করা হলে কাটা কাটা হয়ে যায়।

সুতরাং, এটি প্রতিরোধের জন্য দুটি সম্ভাব্য উপায় রয়েছে:

1.) একটি রিজেক্সপ ম্যাপিং ব্যবহার করে

ম্যাপিংয়ের শেষ অংশে একটি রেজেক্স ব্যবহার করুন

@GetMapping("/example/{firstValue}/{secondValue:.+}")   
public void example(
  @PathVariable("firstValue") String firstValue,
  @PathVariable("secondValue") String secondValue) {
    //...
}

+ ব্যবহার করে, আমরা বিন্দুর পরে যে কোনও মানও পাথ ভেরিয়েবলের অংশ হতে হবে তা নির্দেশ করি indicate

২) আমাদের @ প্যাথভেরিয়েবলের শেষে একটি স্ল্যাশ যুক্ত করা

@GetMapping("/example/{firstValue}/{secondValue}/")
public void example(
  @PathVariable("firstValue") String firstValue,
  @PathVariable("secondValue") String secondValue) {
    //...
}

এটি আমাদের দ্বিতীয় পরিবর্তনশীলটিকে বসন্তের ডিফল্ট আচরণ থেকে রক্ষা করবে।

3) স্প্রিংয়ের ডিফল্ট ওয়েবএমভিসি কনফিগারেশন ওভাররাইড করে

স্প্রিং ডিফল্ট কনফিগারেশনে টীকা ব্যবহার করে আমদানিকৃত পরার ওভাররাইড করতে উপায় প্রদান @EnableWebMvc স্থায়ী করা হবে আমরা আমাদের নিজস্ব ঘোষণা করে স্প্রিং MVC কনফিগারেশন কাস্টমাইজ করতে পারেন DefaultAnnotationHandlerMapping আবেদন প্রেক্ষাপটে শিম এবং তার সেটিং useDefaultSuffixPattern মিথ্যাতে সম্পত্তি। উদাহরণ:

@Configuration
public class CustomWebConfiguration extends WebMvcConfigurationSupport {

    @Bean
    public RequestMappingHandlerMapping 
      requestMappingHandlerMapping() {

        RequestMappingHandlerMapping handlerMapping
          = super.requestMappingHandlerMapping();
        handlerMapping.setUseSuffixPatternMatch(false);
        return handlerMapping;
    }
}

মনে রাখবেন যে এই ডিফল্ট কনফিগারেশনটি ওভাররাইড করা সমস্ত url- কে প্রভাবিত করে।

দ্রষ্টব্য: এখানে আমরা ডিফল্ট পদ্ধতিগুলিকে ওভাররাইড করতে ওয়েবএমভিসি কনফিগারেশনসপোর্ট ক্লাস প্রসারিত করছি। 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.