Как получить массив String из контроллера, используя @ResponseBody? - PullRequest
1 голос
/ 27 февраля 2012

Я использую @ResponseBody, чтобы получить json для Browser. Я мог бы получить данные, но теперь, если я пытаюсь получить массив строк или список строк, я получаю следующее

Ресурс, идентифицированный этим запросом, способен генерировать ответы только с характеристиками, не приемлемыми в соответствии с запросом «принять» заголовки ().

Почему вышеуказанный статус?

Ниже приводитсяОбъект, который я возвращаю из контроллера

public  class Temp
{    
 List<String> strArr=new ArrayList<String>();   
 public Temp()
 {
    strArr.add("1");
    strArr.add("2");
    strArr.add("3");
    strArr.add("4");
    System.out.println("temp="+strArr);
 }
}

Ниже приведен контроллер

@RequestMapping ( value = "/temp.htm" , method = RequestMethod.GET,produces="application/json")
public @ResponseBody Temp getTemp()
{
        return new Temp();
}

Я могу получить нормальные данные String, но если я пытаюсь получить массив или список String, я получаюстатус выше.

Пожалуйста, помогите

Ответы [ 2 ]

1 голос
/ 27 февраля 2012

a) Вам нужно установить заголовки принятия на application/json

b) Ваш класс бинов не является правильным Java-бином.Вам нужно предоставить метод получения:

public List<String> getStrArr(){return strAddr;}

c) У вас есть Джексон на вашем пути к классам, и у вас есть правильная конфигурация mvc?В большинстве случаев этого будет достаточно:

 <mvc:annotation-driven />

(см. этот раздел )

d) Я полагаю, вам нужно удалить аннотацию @ResponseBody,Это для прямого вывода строки, а не для неявного преобразования объекта.

0 голосов
/ 27 февраля 2012

Вам нужно настроить конвертер для преобразования ответа в json, например:

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
   <property name="messageConverters">
      <list>
         <ref bean="jacksonJsonMessageConverter"/>
      </list>
   </property>
</bean>

При этом будет использоваться Джексон для преобразования ответа в json.Вам нужно будет добавить библиотеку Джексона в качестве зависимости, более подробную информацию можно найти в этом вопросе .Джексон преобразует любые открытые поля, поэтому вам необходимо добавить метод getStrArr() в Temp для strArr.

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