springmvc返回的数据中汉字在ztree中显示为???

  • Post author:
  • Post category:其他


最近做了一个后台系统的用户管理的demo,主要是基于shiro的权限控制。要返回的权限pojo的字段description中有汉字,树出来了,但是显示的全是???

后来去网上查 需要在requestMapping里加些参数,如下

@RequestMapping(value=”/admin/permissionList”,produces = “text/html;charset=UTF-8”)

图片示例1

图片示例2

这里的text/htm是内容类型,当时返回权限数据的内容类型是text/plain,然后我就照做了,在requestMapping里加上produces = “text/plain;charset=UTF-8”,然而页面上却报错了,Cannot read property ‘substring’ of undefined,应该是数据格式的问题。

还有种方法是在springmvc-context配置文件中配置如下


<mvc:message-converters>

<bean class="org.springframework.http.converter.StringHttpMessageConverter">

<property name="supportedMediaTypes">

<list>

<value>text/plain;charset=UTF-8</value>

<value>application/json;charset=UTF-8</value>

</list>

</property>

</bean>

</mvc:message-converters>


ztree仍然报哪个错,其实是我设置错了,我搭建工程时是从之前的工程复制过来的,里面有如下配置

    <mvc:annotation-driven>
        <mvc:message-converters>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="objectMapper">
                    <bean class="com.fasterxml.jackson.databind.ObjectMapper">
                        <property name="dateFormat">
                              <bean class="java.text.SimpleDateFormat">
                                  <constructor-arg type="java.lang.String" value="yyyy-MM-dd HH:mm:ss" />
                              </bean>
                          </property>
                        <property name="serializationInclusion">
                            <value type="com.fasterxml.jackson.annotation.JsonInclude.Include">NON_NULL</value>
                        </property>
                        <property name="propertyNamingStrategy">
                            <bean class="com.fasterxml.jackson.databind.PropertyNamingStrategy.SnakeCaseStrategy" />
                        </property>
                    </bean>
                </property>
                <property name="supportedMediaTypes">
                    <list>
                        <value>text/html;charset=UTF-8</value>
                        <value>text/json;charset=UTF-8</value>
                        <value>application/json;charset=UTF-8</value>
                        <value>application/json</value>
                    </list>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

我把MappingJackson2HttpMessageConverter误认为StringHttpMessageConverter,所以设置好了却还报错,非常困惑。后来发现了这一点后修改为StringHttpMessageConverter就好了。其实后来试了试,不加StringHttpMessageConverter也没事,就是只加如下就行

<mvc:annotation-driven>

这里想到的就是,很多问题或者bug的解决思路,方向非常重要,有时候一直在百度上查或者自己在一个方向上思考,如果方向错了,很可能越走越远,耽误很多时间。

这里的感悟就是可以先做减法,没用的配置先去掉,减到最小系统后,再做加法去排查问题。

还有一点是权限pojo有个字段是pId,这个字段自动生成的get和set方法是getpId和setpId,并不是首字母大写了。很多工具类或者插件对pojo进行转换时使用对象的get和set方法,比如调用mybatis方法时,返回对象或者对象集合,肯定通过反射或者其他方式获取对象,虽然反射可以打破私有界限,但是你测试后会发现,的确调用了对象的set方法。fastJson将对象转换为json字符串也是通过get方法,即使用getPId和setPId方法,所以最好多写一个get和set方法。

查看资料网址:


https://blog.csdn.net/stationxp/article/details/38775295



https://www.tuicool.com/articles/zeeQfe



https://blog.csdn.net/u010979495/article/details/50610856



版权声明:本文为never_give_up_oldli_原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。