Znalazłem jedno bardzo dziwne zachowanie Spring MVC.Spring MVC zwraca HTTP 406 na adres URL z kropką
mam kontrolera z metodą:
@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);
}
Więc problem jest, gdy id zawiera kropkę (ex "my_file.wav"). Wiosną powraca HTTP 406 w każdym przypadku, ale jeśli id nie zawiera kropki , Spring zwraca responseState (jako json), jak I expet. Próbowałem go naprawić w inny sposób (dodaj @ResponseBody, zmień wersję jackson, obniż wersję na 4.0), ale bez żadnych rezultatów.
Czy ktoś może mi pomóc?
UPDATE włączyć logi na wiosnę mvn i zobaczyłem ten
ID zawiera dot:
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
ID nie zawiera kropki:
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]
ROZWIĄZANIE
Spring does not ignore file extension
SpringMVC: Inconsistent mapping behavior depending on url extension
Twoja odpowiedź wygląda poprawnie, ale to mi nie pomaga. Spring wciąż wysyłał HTTP 406. – Vartlok
teraz spróbuj zmienić requestmapping, aby był po prostu '@RequestMapping (value ="/delete/{id} ", method = RequestMethod.DELETE)' –
I wciąż HTTP 406 – Vartlok