2013-07-08 2 views
1

Я работаю над клиент-серверным приложением. Я получаю сообщение об ошибке: «java.io.IOException: сервер возвратил код ответа HTTP: 406» при запросе метода из сервлета, чтобы получить объект с выбранным именем. На моей стороне сервера я получил следующий код в моем DataController:Получение ошибки «java.io.IOException: сервер ответил на код ответа HTTP: 406» при вызове метода сервлета

@Controller 
    public class DataController { 

     @RequestMapping(value = "/getHarnessType") 
     @ResponseBody 
     public HarnessType getHarnessType(
       @RequestParam("harnessTypeName") String harnessTypeName) { 
      GeneratorService generatorService=new GeneratorServiceImpl(); 
      HarnessType harnessType=generatorService.getHarnessType(harnessTypeName); 
      return harnessType; 
     } 
    } 

часть исходного кода моего клиента, где я звоню метод getHarnessType:

String harnessTypeName=jTextField.getText(); 
url = new URL("http://localhost:8080/getHarnessType?harnessTypeName="+harnessTypeName); 
urlConn = (HttpURLConnection) url.openConnection(); 
OutputStream baos = new ByteArrayOutputStream();     
IOUtils.copy(urlConn.getInputStream(), baos); 

после продолжить последнюю строку я получаю уже упоминалось об ошибке ... интересное, что когда я изменить тип возвращаемого метода getHarnessType в строку, как:

... 
public String getHarnessType(
... 
return harnessType.getName(); 

и передать только строковое значение для клиента (не весь объект), либо ружения работает отлично

полный трассировки стека:

java.io.IOException: Server returned HTTP response code: 406 for URL: http: //localhost:8080/getHarnessType?harnessTypeName=7 
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1245) 
at formular.Formular2.actionPerformed(Formular2.java:100) 
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) 
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) 
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) 
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) 
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) 
at java.awt.Component.processMouseEvent(Component.java:6038) 
at javax.swing.JComponent.processMouseEvent(JComponent.java:3260) 
at java.awt.Component.processEvent(Component.java:5803) 
at java.awt.Container.processEvent(Container.java:2058) 
at java.awt.Component.dispatchEventImpl(Component.java:4410) 
at java.awt.Container.dispatchEventImpl(Container.java:2116) 
at java.awt.Component.dispatchEvent(Component.java:4240) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322) 
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986) 
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916) 
at java.awt.Container.dispatchEventImpl(Container.java:2102) 
at java.awt.Window.dispatchEventImpl(Window.java:2429) 
at java.awt.Component.dispatchEvent(Component.java:4240) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121) 
+2

HTTP: // локальный: 8080getHarnessType harnessTypeName = это выглядит как/отсутствуют после номера порта – dkateros

+0

«/» на самом деле есть, не знают, почему он не был скопирован, я уже редактировал его в исходном сообщении – Michael

+0

Используете ли вы Spring MVC или просто сервлеты? Если это так, используйте правильные теги. –

ответ

0

Проблема, кажется, с клиентом, попробуйте добавить принять заголовки, я думаю, вы не используете браузер. Если веб-сервер обнаруживает, что данные, которые он хочет вернуть, неприемлем для клиента, он возвращает заголовок, содержащий код ошибки 406. Если проблема еще не решена, добавьте трассировку стека.

+0

Я довольно новичок в таких приложениях, можете ли вы объяснить, как добавить заголовки accept? thx – Michael

+0

Я попытался добавить urlConn.getErrorStream(), и я получаю это сообщение: ... Ресурс, идентифицированный этим запросом, способен генерировать ответы с характеристиками, неприемлемыми в соответствии с заголовками запроса «принять» .... – Michael

+0

I отредактировал мой ответ и опубликовал полную статистику стека – Michael

1

Кажется, что возвращенный объект HarnessType не может быть правильно разобран. Я не уверен, что вы используете правильную конфигурацию драйвера аннотации.

Вы можете изменить свой код следующим первым, чтобы увидеть, если он работает:

@Controller 
public class DataController { 

    @RequestMapping(value = "/getHarnessType", method = RequestMethod.GET) 
    public @ResponseBody HarnessType getHarnessType(
      @RequestParam("harnessTypeName") String harnessTypeName) { 
     GeneratorService generatorService=new GeneratorServiceImpl(); 
     HarnessType harnessType=generatorService.getHarnessType(harnessTypeName); 
     return harnessType; 
    } 
} 
+0

Я отредактировал мой код, как вы писали, но ошибка все тот же, я использую «org.springframework.web.bind.annotation. *;» – Michael

+0

Как вы получаете доступ к этому URL-адресу на стороне клиента? Вы указали «contentType» в «application/json; charset = UTF-8»? Например, если вы используете jquery, то ajax api должен выглядеть так: jQuery.ajax ({"type": "POST", "url": url, "contentType": "application/json; charset = UTF-8 "," dataType ":" json "," data ": yourData," success ": yourSuccessCallback}); – Howard

+0

Я только что сделал это: urlConn.setRequestProperty («Content-Type», «application/json»); urlConn.setRequestProperty («Accept-Charset», «UTF-8»); но ошибка все еще остается – Michael

0

попробуйте установить urlConn .setRequestProperty("Content-Type", "application/json"); Ошибка 406 означает, что что-то неправильно в вашем запросе на стороне клиента. Он не способен принять ответ. См here

+0

Я пробовал, но ошибка все тот же – Michael

+0

Я попытался добавить urlConn.getErrorStream(), и я получаю это сообщение: ... Ресурс, идентифицированный этим запросом, способен генерировать ответы с характеристиками, неприемлемыми в соответствии с запросом " принять "заголовки .... – Michael

Смежные вопросы