如何使用@ResponseBody从控制器获取String数组?

时间:2012-02-27 11:21:31

标签: java spring jquery spring-mvc

我正在使用@ResponseBody来获取json到Browser.I可以获取数据,但现在如果我尝试获取字符串数组或字符串列表,那么我得到以下

  

此请求标识的资源只能生成   根据请求具有不可接受的特征的回复   “接受”标题()。

为什么会出现以上状态?

以下是我从控制器

返回的对象
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 个答案:

答案 0 :(得分:1)

a)您需要将接受标头设置为application/json

b)您的bean类不是合适的Java bean。您需要公开一个getter方法:

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

c)你的类路径上有杰克逊,你有一个合适的mvc配置吗?在大多数情况下,这就足够了:

 <mvc:annotation-driven />

(见this section

d)我猜你必须删除@ResponseBody注释。它用于直接输出字符串,而不是用于对象的隐式转换。

答案 1 :(得分:0)

您需要设置转换器以将响应转换为json,例如:

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

这将使用Jackson将响应转换为json。您需要将Jackson lib添加为依赖项,更多详细信息可以在this question中找到。杰克逊将转换所有公共字段,因此您需要为getStrArr() Temp添加strArr方法。