2015-05-18 14 views
5

के साथ यूआरएल पर स्प्रिंग एमवीसी रिटर्न HTTP 406 मुझे स्प्रिंग एमवीसी का एक बहुत अजीब व्यवहार मिला है।डॉट

मैं विधि के साथ नियंत्रक है:

@RequestMapping (value = "/delete/{id:.*}", method = RequestMethod.DELETE) 
public ResponseEntity<Response> delete(@PathVariable (value = "id") final String id) { 
    HttpStatus httpStatus = HttpStatus.OK; 
    final Response responseState = new Response(ResponseConstants.STATUS_SUCCESS); 
    try { 
     POJO pojo = mediaFileDao.findById(id); 
     if (pojo != null) { 
      delete(pojo); 
     } else { 
      httpStatus = HttpStatus.NOT_FOUND; 
      responseState.setError("NOT_FOUND"); 
     } 
    } catch (Exception e) { 
     httpStatus = HttpStatus.INTERNAL_SERVER_ERROR; 
     responseState.setError(e.getMessage()); 
    } 
    return new ResponseEntity<>(responseState, httpStatus); 
} 

तो, समस्या है जब आईडी बिंदु (। पूर्व "my_file.wav") स्प्रिंग रिटर्न HTTP 406 किसी भी मामले में शामिल है, लेकिन आईडी डॉट शामिल नहीं है , वसंत प्रतिक्रिया देता है प्रतिक्रिया के रूप में (जेसन के रूप में) मैं expet। मैंने इसे अलग-अलग तरीके से ठीक करने की कोशिश की (@ResponseBody जोड़ें, जैक्सन संस्करण बदलें, स्प्रिंग से 4.0 तक डाउनग्रेड करें) लेकिन बिना किसी परिणाम के।

क्या कोई मेरी मदद कर सकता है?

अद्यतन मैं वसंत MVN के लिए लॉग सक्षम और देखा यह

आईडी डॉट शामिल हैं:

DEBUG org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver - Resolving exception from handler [public org.springframework.http.ResponseEntity<my.package.response.Response> my.package.Controller.deleteMediaFile(java.lang.String) throws java.lang.Exception]: org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation 
DEBUG org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver - Resolving exception from handler [public org.springframework.http.ResponseEntity<my.package.response.Response> my.package.Controller.deleteMediaFile(java.lang.String) throws java.lang.Exception]: org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation 
DEBUG org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver - Resolving exception from handler [public org.springframework.http.ResponseEntity<my.package.response.Response> my.package.Controller.deleteMediaFile(java.lang.String) throws java.lang.Exception]: org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation 

आईडी शामिल नहीं है डॉट:

DEBUG org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdviceChain - Invoking ResponseBodyAdvice chain for [email protected] 
DEBUG org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdviceChain - After ResponseBodyAdvice chain [email protected] 

समाधान

Spring does not ignore file extension

SpringMVC: Inconsistent mapping behavior depending on url extension

उत्तर

2

अपने सर्वलेट एक्सएमएल में, वसंत के प्रत्यय मिलान बंद कर दें:

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

यह एक विशेषता यह है कि कॉल करने के लिए कैसे वे अपनी सामग्री एक प्रत्यय के रूप में यह चिपके द्वारा वापस चाहते हैं निर्दिष्ट करने के लिए अनुमति देता है यूआरएल के अंत में:

GET /user/bob.json 
GET /use/bob.jsp 

लेकिन 100 में से 99 परियोजनाएं इस सुविधा का उपयोग नहीं करती हैं। और यूआरएल के अंत में डॉट्स होने पर यह समस्याएं पैदा करता है।

+0

आपका उत्तर सही लग रहा है से आया है, लेकिन यह मेरी मदद नहीं करता है। वसंत अभी भी HTTP 406 भेजा गया है। – Vartlok

+0

अब अनुरोध @ _equequestMapping (value = "/ delete/{id}", method = RequestMethod.DELETE) ' –

+0

) और अभी भी HTTP 406 – Vartlok

0

आप एक कस्टम सामग्री बातचीत प्रबंधक सेवा इस तरह परिभाषित करने की जरूरत है:

<mvc:annotation-driven content-negotiation-manager="contentNegotiationManager" /> 

<bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean"> 
    <property name="favorPathExtension" value="false" /> 
</bean> 

इस article

संबंधित मुद्दे