【问题标题】:spring mvc json array double quotes converted to "spring mvc json数组双引号转换为“
【发布时间】:2015-02-16 00:19:48
【问题描述】:

这是我的控制器。

@RequestMapping(value="/updateItem.htm", method = RequestMethod.GET, headers="Accept=*/*", produces = "application/json; charset=utf-8")    
public @ResponseBody ModelAndView updateItem(ModelAndView model) {
                    List<String> list = aspireDAO.getSingleCol("select prod_id from items order by prod_id asc");
                    JsonArray jArray = AspireUtil.toJsonArray(list);
                    model.setViewName("UpdateItem");
            model.addObject("items", jArray);
                    System.out.println(jArray);
            return model;
        }

spring-servlet.xml 中的杰克逊支持

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
      <property name="mediaTypes">
        <map>
          <entry key="html" value="text/html"/>
          <entry key="json" value="application/json"/>
        </map>
      </property>
      <property name="defaultViews">
        <list>
          <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">
            <property name="prefixJson" value="true"/>
          </bean>
        </list>
      </property>
    </bean>

json 数组在我的控制器 sysout 语句中很好。当我检查页面的来源时,json数组会像这样打印

'[&#034;amgc&#034;,&#034;atup&#034;,&#034;ciwy&#034;,&#034;eyqe&#034;,&#034;ijm

可能的原因是什么。如何解决。

问候

亚当

【问题讨论】:

  • System.out.println(jArray); 的输出是什么,你期望什么而不是 '[&amp;#034;amgc&amp;#034;,&amp;#034;atup&amp;#034;, ...
  • 控制器中json数组的sysout是["amgc","atup","ciwy","eyqe","ijmj","jein","jyld","lvwe","两"]
  • 我观察到的是,如果我返回 jsonArray.toString() 我得到 json 数组,但不是在我看来,只是在平面页面上。我想要视图上的那个数组,我认为在这种情况下不应该使用@responsebody。如果我错了,请纠正我
  • 这不是和ajax调用的。请求 url 并返回一个 jsp 我想要那个 jsp 上的 json 数组。
  • 我第一次没有读完。您将 JsonArray 放入模型中并将其传递给 jsp 视图,对吗?你如何在 JSP 中使用它?顺便说一句,&amp;#034;" 的实体表示。

标签: json spring spring-mvc jackson gson


【解决方案1】:

要显示您应该使用的人类可读值

<c:out value="${items}" escapeXml="false"/>

或者只是

${items}

您首先看到这个的原因是特殊字符在添加到输出流之前被编码为被认为是 HTML 安全的 html 实体(您看到的东西)。另一方面,所有用于输出值的标签都有一个合适的转义属性,可以控制是否应该转义显示值。 JSTL 显示默认将 escapeXml 设置为 true,调整这将解决您的问题

【讨论】:

  • 非常感谢。实际上我以前遇到过这个问题,并且很久以前就解决了。我挠了很久。无论如何,你是救生员。谢谢
猜你喜欢
  • 2020-12-22
  • 1970-01-01
  • 2021-05-26
  • 2018-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-14
  • 1970-01-01
相关资源
最近更新 更多