Spring RequestMapping в RestController возвращает 406 - PullRequest
0 голосов
/ 16 октября 2018

Внутри @RestController У меня есть @RequestMapping, который работает, за исключением того, что я получаю 406 в клиенте при попытке вернуть класс POJO ResponseVO

@RequestMapping(value = "path", method = RequestMethod.POST
            , produces = MediaType.APPLICATION_JSON_VALUE)
    public @ResponseBody ResponseEntity<GenericResponse> path(

...
ResponseVO responseVO = new responseVO();
return new ResponseEntity<>(responseVO, HttpStatus.OK);

Я отправляю POST с телом JSON,Заголовки моего запроса:

Connection: keep-alive
Content-Type: application/json
Accept: */*
Content-Length: 58
Host: localhost:8080
User-Agent: Apache-HttpClient/4.5.6 (Java/1.8.0_151)

Заголовки ответа:

HTTP/1.1 406 Not Acceptable
Server: Apache-Coyote/1.1
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: POST, GET, PUT, OPTIONS, DELETE
Access-Control-Max-Age: 3600
Access-Control-Allow-Headers: X-Requested-With, Content-Type, Authorization, Origin, Accept, Access-Control-Request-Method, Access-Control-Request-Headers
Content-Type: text/html;charset=utf-8
Content-Language: en
Content-Length: 1067

Ответы [ 3 ]

0 голосов
/ 16 октября 2018

когда вы используете @RestController, это автоматически означает, что вы аннотируете @Controller и @ResponseBody при весенней загрузке.Таким образом, вам не нужно явно добавлять аннотацию @ResponseBody в ваш метод.Также @ResponseBody аннотация добавляется над методом без объявления метода.Так что даже если вы добавите эту аннотацию правильно, ваш код должен работать нормально.посмотрите ниже.

@RequestMapping(value = "path", method = RequestMethod.POST, produces =MediaType.APPLICATION_JSON_VALUE)
@ResponseBody 
public ResponseEntity<GenericResponse> path(

...
    ResponseVO responseVO = new responseVO();
    return new ResponseEntity<>(responseVO, HttpStatus.OK);
0 голосов
/ 16 октября 2018

Вы не установили свойство consumes в @RequestMapping.

Но вместо этого вы можете использовать @PostMapping для JSON, все значения будут установлены по умолчанию.

просто @PostMapping("path")

0 голосов
/ 16 октября 2018

Прежде всего, удалите аннотацию @ResponseBody из метода, поскольку она уже включена в аннотацию @RestController.Также удалите атрибут produces из @RequestMapping и проверьте, исчезла ли проблема.

...