我正在使用@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列表,我就会得到上述状态。
请帮忙
答案 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
方法。