org.springframework.http.InvalidMediaTypeException в загрузочном приложении Spring - PullRequest
0 голосов
/ 29 августа 2018

Моё весеннее загрузочное приложение работало нормально. Внезапно я сталкиваюсь со странной проблемой.

Ниже StackTrace:

 Inside Global Exception Handler. Exception caught is {}
 org.springframework.http.InvalidMediaTypeException: Invalid mime type "text/xml; charset=UTF-8,application/xml": UTF-8,application/xml
at org.springframework.http.MediaType.parseMediaType(MediaType.java:452) ~[spring-web-4.3.13.RELEASE.jar!/:4.3.13.RELEASE]
at org.springframework.http.HttpHeaders.getContentType(HttpHeaders.java:760) ~[spring-web-4.3.13.RELEASE.jar!/:4.3.13.RELEASE]
at org.springframework.web.client.HttpMessageConverterExtractor.getContentType(HttpMessageConverterExtractor.java:115) ~[spring-web-4.3.13.RELEASE.jar!/:4.3.13.RELEASE]
at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:85) ~[spring-web-4.3.13.RELEASE.jar!/:4.3.13.RELEASE]
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:662) ~[spring-web-4.3.13.RELEASE.jar!/:4.3.13.RELEASE]
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:620) ~[spring-web-4.3.13.RELEASE.jar!/:4.3.13.RELEASE]
at org.springframework.web.client.RestTemplate.postForObject(RestTemplate.java:387) ~[spring-web-4.3.13.RELEASE.jar!/:4.3.13.RELEASE]
at com.airtelbank.insurance.utils.RestUtils.postXmlRequest(RestUtils.java:100) ~[classes!/:1.0.5]
at com.airtelbank.insurance.utils.RestUtils.postXmlRequest(RestUtils.java:122) ~[classes!/:1.0.5]
at com.airtelbank.insurance.service.impl.vehicle.IDVServiceImpl.getIDVValue(IDVServiceImpl.java:116) ~[classes!/:1.0.5]
at com.airtelbank.insurance.controller.vehicle.GIController.checkIDV(GIController.java:198) ~[classes!/:1.0.5]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_151]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_151]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_151]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_151]

Отображение запросов в контроллере:

@RequestMapping(value = "v1/test", method = RequestMethod.GET, consumer ="application/json",produces = {"application/JSON"})

Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Когда вы читаете xml из стороннего сервиса, вы должны правильно его проанализировать и иметь пометку ниже на вашей конечной точке Rest, чтобы преобразовать ее в json.

@RequestMapping(value = "v1/test", method = RequestMethod.GET, consumes = {"application/json"} ,produces = {"application/json"})

Атрибуты produces и consumes указывают тип данных, создаваемых этой конечной точкой, и тип данных, потребляемых (принимаемых) этой конечной точкой соответственно.

0 голосов
/ 29 августа 2018

когда вы публикуете код, вам нужно отправить запрос как content-type = application / xml или text / xml

изменить, как это

@RequestMapping(value = "/test",consumer ="application/xml or text/xml", produces = {"application/json"})

после этого измените тип контента на стороне заголовка запроса на application / xml или text / xml тогда это будет исправлено. А также укажите метод (GET, POST)

@RequestMapping(value = "v1/test", method = RequestMethod.POST,consume="text/xml",produces="application/json")
@ResponseBody
public ResponseEntity<CustomObject> test(@RequestBody CustomXMLObject) {
    // do some logical things for example change to json

return new ResponseEntity<CustomObject>(convertedJsonObject,HttpStatus.OK);
}

запросить этот метод как post и установить тип содержимого заголовка как text / xml

...