2013-07-10 1 views
1

Извинения, я не видел тега для java-noob.HttpMediaTypeNotAcceptableException при указании applicaiton/xml в заголовке Accept

Я работаю с существующим спокойным api весной. Мне было поручено добавить новый api с несколькими утилитами, каждый из которых возвращает строку. Все идет нормально. Все работает хорошо.

Я добавил простую обертку, чтобы вернуть строку как объект, и я смог построить/развернуть/тест, и я получаю назад мой ответ, который выглядит как

{ id: "12345" } 

Если я указать Accept заголовка = application/xml я получаю следующее исключение:

org.springframework.web.HttpMediaTypeNotAcceptableException: не удалось найти приемлемые Представительские

Другие методы в этом пакете, похоже, сериализуются как в xml, так и в json fine. Я не вижу никакого пользовательского кода сериализации, который используется в базе контроллера, и я не знаю, где он обрабатывается (или даже связан с сериализацией). Может кто-нибудь помочь мне выяснить, с чего начать искать?

Вот мой [упрощенный] Контроллер:

@Controller 
public class UtilController extends ControllerBase 
{ 

    @XmlRootElement(name="util_response") 
    public static class UtilResponse extends APIResponseBase 
    { 
     private String id; 

     @XmlElement(name="id") 
     public String getId() 
     { 
      return id; 
     } 

     public void setId(String id) 
     { 
      this.id = id; 
     } 
    } 

    @RequestMapping(value = "/{pid}/util/output", method = RequestMethod.GET) 
    @ResponseBody 
    public UtilResponse output(HttpServletResponse httpResponse, 
      @PathVariable("pid") int pid, 
      @RequestParam(value = "id", required=true) String id) throws Exception 
    { 
      UtilResponse utilResponse = new UtilResponse(); 
      utilResponse.setId(id); 
      return utilResponse; 
    } 
} 

Я также попытался обновить @RequestMapping и добавил produces = "application/xml" (да, очевидно, не имея ни малейшего понятия, что это действительно делает), но это был нулевой эффект.

Серьезно, я действительно новичок в том, как все это java-материал «работает» (.net-dev по профессии) и хотел бы больше узнать. Я не знаю, что такое Jackson, но я не вижу ссылок на него в нашем проекте, и все остальное, похоже, работает так, пожалуйста, никаких ответов, которые говорят: «Почему бы вам просто не использовать Джексона?» У меня также есть крайние сроки, поэтому иногда просто получение его работы имеет приоритет.

ответ

2

Пожалуйста никаких ответов, которые говорят: "Почему бы вам не просто использовать Джексон

Никто не скажет, что Джексон для JSON;?.)

производит =" приложение/XML «..., но это имело нулевой эффект

produces ограничивает метод обработчика предоставленными типами. Таким образом, produces="application\xml" делает метод недоступным для запросов, ожидающих JSON, например. Это не меняет результат метода.

Ваше описание проблемы указывает на то, что Spring не смог найти способ сериализации UtilResponse - XML. Наиболее вероятной причиной является то, что JAXB2 нет в пути к классам. Spring использует это по умолчанию для создания XML.

+0

спасибо, что привело меня на правильный путь. Я добавил ' .... UtilController $ UtilResponse' в servlet-context.xml, и это сработало волшебно! – earthling

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