【问题标题】:How to get String array from controller using @ResponseBody?如何使用@ResponseBody 从控制器获取字符串数组?
【发布时间】:2012-02-27 11:21:31
【问题描述】:

我正在使用 @ResponseBody 将 json 获取到浏览器。我可以获取数据,但是现在如果我尝试获取字符串数组或字符串列表,那么我会得到以下内容

这个请求标识的资源只能生成 具有根据请求不可接受的特性的响应 “接受”标题()。

为什么会出现上述状态?

以下是我从控制器返回的对象

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();
}

我可以获得正常的字符串数据,但如果我尝试获取字符串的数组或列表,我会得到上述状态。

请帮忙

【问题讨论】:

    标签: java spring jquery spring-mvc


    【解决方案1】:

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

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

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

    c) 你的类路径中有 Jackson,你有正确的 mvc 配置吗?在大多数情况下,这就足够了:

     <mvc:annotation-driven />
    

    (见this section

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

    【讨论】:

    • 是的,这行得通,对不起,我错过了非常基本的部分。非常感谢。
    【解决方案2】:

    需要设置一个转换器将响应转换为json,如:

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

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

    【讨论】:

    • 我正在使用 它在内部处理 httpMessageConversions。
    猜你喜欢
    • 1970-01-01
    • 2019-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多