Ошибка 405 сервлета Guice: кажется, не установлен Content-type, установленный в text/json для MediaType.APPLICATION_JSON

Я звоню из jQGrid в сервлет Guice со следующей привязкой:

@Produces({MediaType.APPLICATION_JSON})
@Path("/{param}")
public String getJson(@PathParam("param") String param) {
    ...
    return return json.toString();
}

Запрашивая URL-адрес напрямую, я вижу JSON. Когда jqgrid выполняет запрос, я получаю ответ 405: метод не разрешен. Я видел, как это происходило раньше, когда возвращаемая страница не имеет Content-type, установленного на «text/json» (здесь jqgrid не очень гибкий).

ВОТ ЗАПРОС: POST запроса значения ключа /myapp/json/jqgrid/json ... HTTP/1.1 x-requested-with XMLHttpRequest Accept-Language en-us Referer http://localhost:8080/myapp/myPage... Принять application/json, text/javascript, / Content-Type application/x -www-form-urlencoded Accept-Encoding gzip, deflate User-Agent Mozilla/5.0 (совместимый; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0) Host localhost:8080 Content-Length 63 Connection Keep-Alive Cache-Control нет -кэш

ВОТ ОТВЕТ: Значение ключа Ответ HTTP/1.1 405 Метод не разрешен Сервер Apache-Coyote/1.1 Разрешить GET, OPTIONS, HEAD Content-Type text/html;charset=utf-8 Content-Length 1034

Любые мысли о том, как заставить сервлет guice установить для Content-type значение «text/json» и разрешить ответ?


person JStark    schedule 12.08.2011    source источник
comment
text/json неверен Content-type для ответа JSON. Правильный Content-type — это application/json. См. здесь   -  person Oleg    schedule 12.08.2011
comment
На самом деле запрос был Accept application/json (см. мой вывод REQUEST выше). Проблема в том, что ответ от сервлета Guice возвращается как Content-Type text/html;charset=utf-8. В Guice я пробовал несколько комбинаций @Produces, чтобы получить application/json безуспешно, хотя MediaType.APPLICATION_JSON должен генерировать правильный ответ.   -  person JStark    schedule 12.08.2011


Ответы (1)


Это решено. Я использовал аннотацию @GET, а jQGrid выдавал сообщение. Я изменил @POST, и он начал работать. Это может решить проблему для других с соответствующими ошибками 405.

person JStark    schedule 15.08.2011