从一个简单的Spring MVC JSON服务我的输出之前,我得到了&&一起额外的一

2019-07-17 22:28发布

好吧,我有一个Spring MVC的基于JSON的Web服务。 这是一个测试应用程序,建立Spring MVC的基于REST的JSON服务时,我从来没有见过一个问题是这样的。 我的测试服务的输出总是返回,并随后我想返回数据空JSON对象,然后&&。 所以,结果是这样的:

{} {&& “状态”:200, “serverTime”: “2013年1月6日下午7点35分45秒EST”}

我控制器的方法来处理这个非常简单的GET请求的代码是:

    @RequestMapping(value = "/test.json", method = RequestMethod.GET)
public ModelMap test(ModelMap m, HttpServletRequest request,
        Locale locale) {
    Date date = new Date();
    DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG,
            DateFormat.LONG, locale);

    String formattedDate = dateFormat.format(date);

    m.addAttribute("serverTime", formattedDate);
    m.addAttribute("status", 200);

    return m;
}

我不能为我的生活找出在哪个额外的空{} JSON对象是从哪里来的。 我的Spring配置如下:

<beans:bean
    class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
    <beans:property name="mediaTypes">
        <beans:map>
            <beans:entry key="html" value="text/html" />
            <beans:entry key="json" value="application/json" />
        </beans:map>
    </beans:property>
    <beans:property name="defaultViews">
        <beans:list>
            <beans:bean
                class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">
                <beans:property name="prefixJson" value="true" />
            </beans:bean>
        </beans:list>
    </beans:property>
    <beans:property name="viewResolvers">
        <beans:list>
            <beans:bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
                <beans:property name="viewClass"
                    value="org.springframework.web.servlet.view.JstlView" />
                <beans:property name="prefix" value="/WEB-INF/views/" />
                <beans:property name="suffix" value=".jsp" />
            </beans:bean>
        </beans:list>
    </beans:property>

任何帮助将不胜感激。 我已经到6小时周日试图找出为什么会这样吹。

Answer 1:

MappingJacksonJsonView的javadoc:

public void setPrefixJson(boolean prefixJson)

指示是否由该视图中的输出JSON应与前缀“{} &&”。 默认为false。 前缀以这种方式JSON字符串用来帮助防止JSON劫持。 前缀呈现字符串作为脚本,以便它不能被劫持语法无效。 这个前缀不会影响JSON的评估,但如果JSON验证弦上进行的,前缀需要被忽略。

那你有没有试着用prefixJson设置为false?

<beans:bean
    class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
    <beans:property name="mediaTypes">
        <beans:map>
            <beans:entry key="html" value="text/html" />
            <beans:entry key="json" value="application/json" />
        </beans:map>
    </beans:property>
    <beans:property name="defaultViews">
        <beans:list>
            <beans:bean
                class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">
                <beans:property name="prefixJson" value="false" />
            </beans:bean>
        </beans:list>
    </beans:property>
    <beans:property name="viewResolvers">
        <beans:list>
            <beans:bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
                <beans:property name="viewClass"
                    value="org.springframework.web.servlet.view.JstlView" />
                <beans:property name="prefix" value="/WEB-INF/views/" />
                <beans:property name="suffix" value=".jsp" />
            </beans:bean>
        </beans:list>
    </beans:property>


Answer 2:

我收到了同样的东西,当你在你提供的:)我只是不小心忘了添加注释的代码做我犯同样的错误@ResponseBody控制器方法。



文章来源: I am getting an extra empty {} json object along with a && before my output from a simple spring mvc json service