स्प्रिंग MVC @PathVariable डॉट (।) के साथ छोटा हो रहा है


361

यह सवाल का सिलसिला जारी है। MVC @PathVariable हो रही है

स्प्रिंग फ़ोरम बताता है कि उसने ContentNegotiationManager के हिस्से के रूप में (3.2 संस्करण) तय किया है। नीचे दिए गए लिंक को देखें।
https://jira.springsource.org/browse/SPR-6164
https://jira.springsource.org/browse/SPR-7632

मेरे आवेदन में .Promameter के साथ .com को छोटा किया गया है।

क्या कोई मुझे समझा सकता है कि इस नई सुविधा का उपयोग कैसे करें? यह xml में कैसे विन्यास योग्य है?

नोट: स्प्रिंग फ़ोरम- # 1 स्प्रिंग MVC @PathVariable with डॉट (।) छोटा हो रहा है

जवाबों:


485

जहाँ तक मुझे पता है यह मुद्दा केवल अनुरोध के अंत में पथप्रदर्शक के लिए प्रकट होता है।

हम रिक्वेस्ट मैपिंग में रेगेक्स एडऑन को परिभाषित करके इसे हल करने में सक्षम थे।

 /somepath/{variable:.+}

1
धन्यवाद, मुझे लगता है कि यह फिक्स पहले भी उपलब्ध है (3.2V से पहले) ?. हालाँकि मुझे यह ठीक नहीं लगा; चूँकि यह सभी url पर आवश्यक है, जिसे मेरे आवेदन में संभाला जाना है ... और भविष्य के URL कार्यान्वयन को भी इस बात का ध्यान रखना है ...
काणगावेलु सुगुमार

4
यहाँ मैं इस मुद्दे को वसंत में 3.0.5<!-- Spring Configuration needed to avoid URI using dots to be truncated --> <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"> <property name="useDefaultSuffixPattern" value="false" /> </bean>
फरीद

11
@ मर्सिज़, सिंटैक्स है {variable_name:regular_expression}, इसलिए यहां हमारे पास वैरिएबल नाम है variable, जिसका मान regex .+(जहाँ .'किसी भी वर्ण' और +'एक या अधिक बार' से है) का उपयोग करके मिलान किया जाएगा ।
मिचेल राइबक

4
@StefanHaberl यदि आप variableनियमित रूप से मेल खाते हैं , तो स्प्रिंग अपनी प्रत्यय पहचान सुविधाओं का उपयोग करता है और डॉट के बाद सब कुछ काट देता है। जब आप regexp मिलान का उपयोग करते हैं, तो उन सुविधाओं का उपयोग नहीं किया जाता है - चर केवल regexp से मेल खाते हैं जो आप प्रदान करते हैं।
मिशैल रयबाक

9
@ स्मार्टिन "variable:.+"तब काम नहीं करता है जब चर में एक से अधिक डॉट हों। जैसे कि बाकी रास्तों के अंत में ईमेल डालना /path/abc@server.com.au। नियंत्रक को भी बुलाया नहीं जाता है, लेकिन यह तब काम करता है जब केवल एक बिंदु होता है /path/abc@server.com। किसी भी विचार क्यों और / या एक वैकल्पिक हल?
बोहेमियन

242

स्प्रिंग का मानना ​​है कि अंतिम बिंदु के पीछे कुछ भी एक फ़ाइल एक्सटेंशन है जैसे कि .jsonया .xmlअपने पैरामीटर को पुनः प्राप्त करने के लिए इसे छोटा करें।

इसलिए यदि आपके पास /somepath/{variable}:

  • /somepath/param, /somepath/param.json, /somepath/param.xmlया /somepath/param.anythingमूल्य के साथ एक परम में परिणाम होगाparam
  • /somepath/param.value.json, /somepath/param.value.xmlया /somepath/param.value.anythingमूल्य के साथ एक परम में परिणाम होगाparam.value

यदि आप अपनी मैपिंग को /somepath/{variable:.+}सुझाव के अनुसार बदलते हैं , तो किसी भी बिंदु सहित, अंतिम को आपके पैरामीटर के हिस्से के रूप में माना जाएगा:

  • /somepath/param मूल्य के साथ एक परम में परिणाम होगा param
  • /somepath/param.json मूल्य के साथ एक परम में परिणाम होगा param.json
  • /somepath/param.xml मूल्य के साथ एक परम में परिणाम होगा param.xml
  • /somepath/param.anything मूल्य के साथ एक परम में परिणाम होगा param.anything
  • /somepath/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>

तो, फिर से, यदि आपके पास है /somepath/{variable}:

  • /somepath/param, /somepath/param.json, /somepath/param.xmlया /somepath/param.anythingमूल्य के साथ एक परम में परिणाम होगाparam
  • /somepath/param.value.json, /somepath/param.value.xmlया /somepath/param.value.anythingमूल्य के साथ एक परम में परिणाम होगाparam.value

नोट: डिफ़ॉल्ट कॉन्फ़िगरेशन से अंतर केवल तभी दिखाई देता है, जब आपके पास मैपिंग जैसा हो somepath/something.{variable}Resthub परियोजना मुद्दा देखें

यदि आप एक्सटेंशन प्रबंधन रखना चाहते हैं, तो स्प्रिंग 3.2 के बाद से आप प्रत्ययपार्टनर मान्यता को सक्रिय रखने के लिए, लेकिन पंजीकृत एक्सटेंशन तक सीमित रखने के लिए RequestMappingHandlerMapping सेम की उपयोग की जा सकती है।

यहाँ आप केवल 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: एनोटेशन-चालित अब एक कस्टम बीन प्रदान करने के लिए एक कंटेंटनॉग्रेशन विकल्प को स्वीकार करता है, लेकिन RequestMappingHandlerMapping की संपत्ति को सही (डिफ़ॉल्ट झूठ) में बदलना होगा (cf. https://jira.pringsource.org/browse/SPR-7632-76 )।

उस कारण से, आपको अभी भी सभी mvc: एनोटेशन-चालित कॉन्फ़िगरेशन को ओवरराइड करना होगा। मैंने एक कस्टम अनुरोध करने के लिए स्प्रिंग के लिए एक टिकट खोला है । MappingHandlerMapping: https://jira.springsource.org/browse/SPR-11253 । कृपया वोट करें यदि आप में intereted हैं।

ओवरराइड करते समय, कस्टम एक्ज़ीक्यूशन मैनेजमेंट ओवरराइडिंग पर भी विचार करने के लिए सतर्क रहें। अन्यथा, आपके सभी कस्टम अपवाद मैपिंग विफल हो जाएंगे। आपको सूची बीन के साथ संदेश भेजने वालों का पुन: उपयोग करना होगा:

<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


मुझे माफ़ कर देना मैं नौसिखिया हूँ, तो आप बीन कॉन्फिगर्स कहाँ से लाएँगे? और यह किस वसंत संस्करण पर लागू होता है?
स्पलैश

@ स्लैश: आपको इन बीन्स को अपने "मानक" स्प्रिंग एप्लिकेशन कॉन्टेक्स्ट.एक्सएमएल फ़ाइल (एस) में परिभाषित करना होगा। यह कम से कम स्प्रिंग 3.2 पर लागू होता है। शायद (कम से कम आंशिक रूप से) से पहले
21

यह मेरी राय में सही उत्तर है। ऐसा लगता है कि ओप्स समस्या के लिए पैरामीटर "यूजग्रेटडेडसफिक्सपैटर्नमैच" को बिल्कुल पेश किया गया था।
lrxw

यह मेरे लिए समाधान का केवल आधा था। देखिए @Paul Aerer का जवाब
8bitjunkie

96

स्प्रिंग 4 के लिए अपडेट: 4.0.1 के बाद से आप PathMatchConfigurer(अपने द्वारा WebMvcConfigurer) का उपयोग कर सकते हैं , जैसे

@Configuration
protected static class AllResources extends WebMvcConfigurerAdapter {

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

}


@Configuration
public class WebConfig implements WebMvcConfigurer {

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

Xml में, यह ( https://jira.spring.io/browse/SPR-10163 ) होगा:

<mvc:annotation-driven>
    [...]
    <mvc:path-matching registered-suffixes-only="true"/>
</mvc:annotation-driven>

11
यह अब तक का सबसे साफ समाधान है: इसके चारों ओर हैकिंग करने के बजाय, इस सुविधा को बंद करें। हम वैसे भी इस सुविधा का उपयोग नहीं कर रहे हैं, इसलिए समस्या हल हो गई है - एकदम सही!
डेविड लैवेंडर

AllResources वर्ग कहाँ जाता है?
irl_irl

1
@ste_irl अपने मुख्य के समान पैकेज में एक जावा वर्ग जोड़ें।
kometen

5
matcher.setUseSuffixPatternMatch(false)प्रत्यय मिलान को पूरी तरह से अक्षम करने के लिए उपयोग करें ।
जियान मार्को घेरार्डी

यह मेरे लिए समाधान का केवल आधा था। देखिए @Paul Aerer का जवाब
8bitjunkie

87

मार्टिन फ्रे के जवाब के अलावा, यह RequestMapping मूल्य में एक अनुगामी स्लैश जोड़कर भी तय किया जा सकता है:

/path/{variable}/

ध्यान रखें कि यह फिक्स रखरखाव का समर्थन नहीं करता है। अब सभी यूआरआई के लिए एक अनुगामी स्लेश होना आवश्यक है - ऐसा कुछ जो एपीआई उपयोगकर्ताओं / नए डेवलपर्स के लिए स्पष्ट नहीं हो सकता है। क्योंकि यह संभव है कि सभी पैरामीटर .उनमें न हों, यह आंतरायिक कीड़े भी पैदा कर सकता है


2
यह भी एक क्लीनर समाधान है। मुझे यह पता लगाना था कि आईई प्रत्यय के अनुसार हेड को स्वीकार करने का कठिन तरीका है। इसलिए मैं कुछ .doc अनुरोध पर पोस्ट करना चाहता था और मुझे हमेशा नए html पृष्ठ के बजाय एक डाउनलोड मिला। यह तरीका तय हो गया।
मार्टिन फ्रे

यह मेरे लिए सबसे आसान उपाय है और मेरी समस्या को हल करता है; regexp कई मामलों के लिए ओवरकिल का एक सा लगता है
रिकार्डो कोसु

7
लेकिन यह स्वचालित रूप से ट्रेलिंग स्लैश को हटाने के लिए AngularJS के डिफ़ॉल्ट व्यवहार से टकराता है। यह नवीनतम कोणीय रिलीज में कॉन्फ़िगर किया जा सकता है लेकिन यह घंटों के लिए ट्रैक करने के लिए कुछ है अगर आपको नहीं पता कि क्या चल रहा है।
dschulten

1
@dschulten और आपने मुझे डिबगिंग के घंटे बचाए, धन्यवाद! फिर भी आपको उत्तर में उल्लेख करना चाहिए कि HTPP अनुरोधों में अनुगामी स्लैश की आवश्यकता होगी।
हॉफमैन

1
यह बहुत खतरनाक है! मैं निश्चित रूप से इसकी सिफारिश नहीं करूंगा क्योंकि एपीआई को लागू करने वाला कोई भी कम से कम इसकी उम्मीद करेगा। बहुत गैर बनाए रखने योग्य।
स्पार्कस्पाइडर

32

स्प्रिंग बूट रेस्ट कंट्रोलर में, मैंने निम्न चरणों का पालन करके इन्हें हल किया है:

RestController:

@GetMapping("/statusByEmail/{email:.+}/")
public String statusByEmail(@PathVariable(value = "email") String email){
  //code
}

और बाकी क्लाइंट से:

Get http://mywebhook.com/statusByEmail/abc.test@gmail.com/

2
यह उत्तर काम करने के लिए एक कठिन स्लैश पर निर्भर है।
8bitjunkie

2
एक आकर्षण की तरह काम करता है (स्लैश के बिना भी)। धन्यवाद!
afe

27

": + +" को जोड़ने से मेरे लिए काम हुआ, लेकिन तब तक नहीं जब तक मैंने बाहरी घुंघराले कोष्ठकों को हटा नहीं दिया।

मान = { "/username/ellingid:.+}" } काम नहीं किया

मान = "/username/ellingid:.+}" काम करता है

आशा है कि मैंने किसी की मदद की :)


ऐसा इसलिए है क्योंकि घुंघराले कोष्ठक RegEx का मूल्यांकन करते हैं और आपके पास पहले से ही कुछ हैid
8bitjunkie

15

/somepath/{variable:.+}जावा requestMappingटैग में काम करता है ।


मैं इस जवाब को पसंद करता हूं क्योंकि यह नहीं दिखाता है कि क्या काम नहीं किया।
जॉनीब

एक से अधिक बिंदु वाले ईमेल पतों के लिए काम नहीं करता है।
8bitjunkie

1
@ 8bitjunkie Sth जैसे "/{code:.+}"कई डॉट्स के लिए काम करता है, यानी एक के 61.12.7लिए भी काम नहीं करता हैk.a.p@o.i.n
कोशिश कर

13

यहाँ एक दृष्टिकोण है जो शुद्ध रूप से जावा विन्यास पर निर्भर करता है:

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 MvcConfig extends WebMvcConfigurationSupport{

    @Bean
    public RequestMappingHandlerMapping requestMappingHandlerMapping() {
        RequestMappingHandlerMapping handlerMapping = super.requestMappingHandlerMapping();
        handlerMapping.setUseSuffixPatternMatch(false);
        handlerMapping.setUseTrailingSlashMatch(false);
        return handlerMapping;
    }
}

धन्यवाद, इसे मेरे लिए हल कर दिया। इसके अलावा, यह बहुत साफ और स्पष्ट है। +1
bkis

11

इस मुद्दे के आसपास काम करने के लिए एक बहुत आसान तरीका है एक अनुगामी स्लेश संलग्न करना ...

उदाहरण के लिए:

उपयोग :

/somepath/filename.jpg/

के बजाय:

/somepath/filename.jpg

11

स्प्रिंग बूट में, द रेगुलर एक्सप्रेशन जैसे समस्या को हल करते हैं

@GetMapping("/path/{param1:.+}")

ध्यान दें कि यह केवल एक डॉट के लिए काम करता है। यह ईमेल पतों के लिए काम नहीं करता है।
8bitjunkie

1
@ 8bitjunkie Sth की तरह "/{code:.+}"कई डॉट्स के लिए काम करता है, यानी एक के 61.12.7लिए भी काम नहीं करता हैk.a.p@o.i.n
Tryingard

1
@ 8bitjunkie मैंने इसे IP पते के साथ परीक्षण किया है। यह बहुत अच्छा काम करता है। तो, इसका मतलब है कि यह कई डॉट्स के लिए काम करता है।
डैपर डान

6

स्प्रिंग 4.2 के लिए पथ नामों में ईमेल पते सहित संपूर्ण समाधान है

<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:annotation-driven
    content-negotiation-manager="contentNegotiationManager">
    <mvc:path-matching suffix-pattern="false" registered-suffixes-only="true" />
</mvc:annotation-driven>

इसे एप्लिकेशन- xml में जोड़ें


अपवोट - यह यहां एकमात्र उत्तर है जो स्पष्ट करता है कि दोनों ContentNegotiationManagerFactoryBean और contentNegotiationManager कॉन्फ़िगरेशन आइटम आवश्यक हैं
8bitjunkie

5

यदि आप स्प्रिंग 3.2.x का उपयोग कर रहे हैं और <mvc:annotation-driven />, इसे थोड़ा बनाएँ BeanPostProcessor:

package spring;

public final class DoNotTruncateMyUrls implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        if (bean instanceof RequestMappingHandlerMapping) {
            ((RequestMappingHandlerMapping)bean).setUseSuffixPatternMatch(false);
        }
        return bean;
    }
    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        return bean;
    }
}

फिर इसे अपने MVC कॉन्फ़िगरेशन xml में डालें:

<bean class="spring.DoNotTruncateMyUrls" />

क्या यह ContentNegotiationManager से संबंधित है?
कनागावेलु सुगुमार

मेरा कोड केवल RequestMappingHandlerMapping को कॉन्फ़िगर करता है, ताकि URL को छोटा नहीं किया जाएगा। ContentNegotiationManager एक और जानवर है।
जुका

2
यह पुराना है, लेकिन आपको वास्तव में इसके BeanPostProcessorलिए आवश्यकता नहीं है । यदि आप उपयोग WebMvcConfigurationSupportकरते हैं तो आप requestMappingHandlerMapping @Beanविधि को ओवरराइड कर सकते हैं । यदि आप XML config का उपयोग करते हैं, तो आप बस अपने स्वयं के RequestMappingHandlerMappingबीन को घोषित कर सकते हैं और उस संपत्ति की घोषणा कर सकते हैं।
सोतीरियो डेलिमोलिस

बहुत बहुत धन्यवाद, मैंने एक ही समस्या के लिए विभिन्न समाधानों की कोशिश की, केवल इसने मेरे लिए काम किया। :-)
हम Borg

3

अंत में मुझे स्प्रिंग डॉक्स में समाधान मिला :

फ़ाइल एक्सटेंशन के उपयोग को पूरी तरह से अक्षम करने के लिए, आपको निम्नलिखित दोनों को सेट करना होगा:

 useSuffixPatternMatching(false), see PathMatchConfigurer

 favorPathExtension(false), see ContentNegotiationConfigurer

इसे मेरे WebMvcConfigurerAdapterकार्यान्वयन में जोड़ने से समस्या हल हो गई:

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

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

2

मेरे लिए

@GetMapping(path = "/a/{variableName:.+}")

काम करता है, लेकिन केवल अगर आप अपने अनुरोध url में "% 2E" के रूप में "डॉट" को एनकोड करते हैं तो यह काम करता है। लेकिन सभी के लिए URL की आवश्यकता होती है ... जो "मानक" एन्कोडिंग नहीं है, हालांकि मान्य है। एक बग की तरह लगता है: |

"ट्रेलिंग स्लैश" के समान अन्य कार्य, उस चर को स्थानांतरित करने के लिए है जिसमें डॉट "इनलाइन" पूर्व होगा:

@ गेटमैपिंग (पथ = "/ {चर नाम} / एक")

अब सभी डॉट्स को संरक्षित किया जाएगा, कोई संशोधन या रेगेक्स की आवश्यकता नहीं है।


1

वसंत 5.2.4 (स्प्रिंग बूट v2.2.6.RELEASE) के रूप में PathMatchConfigurer.setUseSuffixPatternMatchऔर ContentNegotiationConfigurer.favorPathExtensionअमान्य हो जाने ( https://spring.io/blog/2020/03/24/spring-framework-5-2-5-available-now और https://github.com/spring-projects/spring-framework/issues/24179 )।

वास्तविक समस्या यह है कि क्लाइंट एक विशिष्ट मीडिया प्रकार (जैसे .com) का अनुरोध करता है और स्प्रिंग ने उन सभी मीडिया प्रकारों को डिफ़ॉल्ट रूप से जोड़ा। ज्यादातर मामलों में आपका REST नियंत्रक केवल JSON का उत्पादन करेगा, इसलिए यह अनुरोधित आउटपुट प्रारूप (.com) का समर्थन नहीं करेगा। इस समस्या को दूर करने के लिए आपको अपने बाकी कंट्रोलर (या विशिष्ट विधि) को अपडेट करके 'ouput' प्रारूप ( @RequestMapping(produces = MediaType.ALL_VALUE)) का समर्थन करना चाहिए और निश्चित रूप से एक डॉट ( {username:.+}) जैसे वर्णों की अनुमति दें ।

उदाहरण:

@RequestMapping(value = USERNAME, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public class UsernameAPI {

    private final UsernameService service;

    @GetMapping(value = "/{username:.+}", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.ALL_VALUE)
    public ResponseEntity isUsernameAlreadyInUse(@PathVariable(value = "username") @Valid @Size(max = 255) String username) {
        log.debug("Check if username already exists");
        if (service.doesUsernameExist(username)) {
            return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
        }
        return ResponseEntity.notFound().build();
    }
}

स्प्रिंग 5.3 और इसके बाद के संस्करण पंजीकृत प्रत्यय (मीडिया प्रकार) से मेल खाएंगे।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.