HttpMediaTypeNotAcceptableException: не удалось найти приемлемое представление - PullRequest
0 голосов
/ 28 сентября 2019

У меня есть следующий класс контроллера:

@RestController
@RequestMapping(value = "/query")
public class QueryController {

    @Autowired
    private QueryService queryService;

    // this post API works perfectly fine
    @PostMapping(value = "/submit")
    public void submitQuery(@Valid @RequestBody Query query) {
        queryService.submit(query);
    }

    // this API is throwing the error
    @GetMapping(value = "/find/email/{email:.+}")
    public List<Query> fetchByEmail(@PathVariable("email") String email) {
        return queryService.fetchByEmail(email);
    }
}

Я отправляю следующий запрос cURL:

curl -X GET http://localhost:8562/query/find/email/abc@gmail.com -H 'Content-Type: application / json '

В режиме отладки я вижу, что запрос поступил на контроллер с ожидаемым идентификатором электронной почты, который я отправил в запросе.Также произошел поиск по уровню DAO, и он вернул 1 запись, но API выдает следующую ошибку:

{
    "timestamp": 1569655451392,
    "status": 406,
    "error": "Not Acceptable",
    "message": "Could not find acceptable representation",
    "path": "/query/find/email/abc@gmail.com"
}

Может кто-нибудь помочь?

Примечание: я использую springBootVersion = '2.0.5.RELEASE'

Редактировать: GET API - это тот, который выдаетошибка.Любой запрос, у которого нет символа точки (.), Работает нормально.Следующий запрос не выдает никакой ошибки:

curl -X GET http://localhost:8562/query/find/email/abc@gmail -H 'Content-Type: application / json'

Edit-2: Прикрепленный скриншот отладки ниже:

enter image description here

С этого момента, если я запускаю код, я получаю следующую ошибку:

{"timestamp": 1569657676774, "status": 406, "error": "Not Acceptable", "message": "Не удалось найти приемлемое представление", "path": "/query/find/email/rishi2893@gmail.com "}

1 Ответ

0 голосов
/ 28 сентября 2019

HTTP 406 Not-Acceptable означает, что сервер не может выдать ответ в формате, понятном клиенту.

Необходимо отправить заголовок Accept, чтобы уведомить сервер о допустимых форматахчто ваш клиент может понять и ensure that your server can produce such formats.

curl -H "Accept: application/json" ...

В дополнение к вышесказанному, когда заголовок Content-Type отправляется в запросе, он указывает тип носителя для запроса, отправляемого из клиент .Заголовок Content-Type должен использоваться в запросах POST / PUT.Это не имеет смысла в запросе GET, поскольку у вас не должно быть тела в таких запросах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...