JSON

JSON字符串转换object错误:MorphDynaBean cannot be cast to com.softri

字号+ 作者:H5之家 来源:H5之家 2017-05-05 11:01 我要评论( )

JSON字符串转换object错误:MorphDynaBean cannot be cast to com.softright.bean.TestBean,类中有集合类型的属性 因为JSONObject.toBean()把JSON字符串转换为

JSON字符串转换object错误:MorphDynaBean cannot be cast to com.softright.bean.TestBean,类中有集合类型的属性 因为JSONObject.toBean()把JSON字符串转换为一个自己定义的类,当其中属性有类似List , Map ,ArrayList的时候,麻烦就来了

错误:MorphDynaBean cannot be cast to com.softright.bean.TestBean

 


解决方法:


在JSONObject.toBean的时候

如果转换的类中有集合,可以先定义Map<String, Class> classMap = new HashMap<String, Class>();

在classMap中put你要转换的类中的集合名,像:classMap.put("data", StoDataInfo.class);

当然也可以put一个集合类("data",Map.class)

然后在toBean()的时候把参数加上, 像:ShenTongInfo stInfo=(ShenTongInfo) JSONObject.toBean(o, ShenTongInfo.class, classMap);


具体实例

 代码如下 复制代码

public class JsonConvertorDemo { 

public static void main(String[] args) { 
B b1 = new B("b1"); 
Map<String, B> bMap = new HashMap<String, B>(); 
bMap.put("key1", b1); 
A a1 = new A(bMap); 

JSONObject jsonObject = JSONObject.fromObject(a1); 
String json = jsonObject.toString(); 
jsonObject = JSONObject.fromObject(json); 

Map<String, Class> classMap = new HashMap<String, Class>(); 
classMap.put("bMap", Map.class); 
a1 = (A) JSONObject.toBean(jsonObject, A.class, classMap); 

bMap = a1.getbMap(); 
System.out.println(bMap.get("key1").getB1()); 

public class A { 
private Map<String, B> bMap = new HashMap<String, B>(); 
public A() {} 
public A(Map<String, B> bMap) { 
this.bMap = bMap; 

public Map<String, B> getbMap() { 
return bMap; 

public void setbMap(Map<String, B> bMap) { 
this.bMap = bMap; 

public class B { 
private String b1; 
public B() {} 
public B(String b1) { 
this.b1 = b1; 

public String getB1() { 
return b1; 

public void setB1(String b1) { 
this.b1 = b1; 

本文章介绍了利用java的一个图形控制来实现jfreechart水晶图饼的实现代码与效果,有需要的同学可以参考一下。

一个水晶效果的拼图如下

image

实现代码如下

 代码如下 复制代码


<%@ page contentType="text/html;charset=GBK"%>
 
 <%@ page
     import="org.jfree.chart.*,org.jfree.chart.servlet.ServletUtilities,
     org.jfree.util.Rotation,org.jfree.data.general.DefaultPieDataset,
     org.jfree.chart.plot.PiePlot3D,org.jfree.chart.title.TextTitle,
     java.awt.Font,org.jfree.chart.plot.PiePlot"%>
 
 <%
     //设置数据集
     DefaultPieDataset dataset = new DefaultPieDataset();
     dataset.setValue("初中高级程序员", 0.52);
     dataset.setValue("项目经理", 0.1);
     dataset.setValue("系统分析师", 0.1);
     dataset.setValue("软件架构师", 0.1);
     dataset.setValue("其他", 0.18);
 
     //通过工厂类生成JFreeChart对象
     JFreeChart chart = ChartFactory.createPieChart3D("IT行业职业分布图",
             dataset, true, true, false);
     //获得3D的水晶图对象
     PiePlot3D pieplot3d = (PiePlot3D) chart.getPlot();
    //设置开始角度
    pieplot3d.setStartAngle(150D);
    //设置方向为“顺时针方向”
    pieplot3d.setDirection(Rotation.CLOCKWISE);
 
    //设置透明度,0.5F为半透明,1为不透明,0为全透明
    pieplot3d.setForegroundAlpha(0.5F);
   
     //没有数据的时候显示的内容
      pieplot3d.setNoDataMessage("无数据显示");
    
      //标题文字乱码  IT行业职业分布图
      TextTitle textTitle = chart.getTitle();
      textTitle.setFont(new Font("宋体", Font.PLAIN, 20));
     
      //饼上的文字乱码
      PiePlot plot = (PiePlot) chart.getPlot();
     plot.setLabelFont(new Font("宋体", Font.PLAIN, 12));
    
      //图例文字乱码 饼图下面的5个说明
      chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12));
     
     String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300,
             null, session);
     String graphURL = request.getContextPath()
             + "/DisplayChart?filename=" + filename;
 %>
 
 <html>
     <head>
         <title>饼状图3(水晶饼图)</title>
     </head>
     <body>
         <img src="<%=graphURL%>" width=500 height=300 border=0
             usemap="#<%= filename %>">
     </body>
 </html>

提供一篇关于java中使用Struts 2框架上传文件代码哦,动态文件上传,有需要的朋友可以参考一下。

HTML表单默认值:

 代码如下 复制代码


...

要使用HTML表单上传文件,需要将HTML表单的enctype属性设置为"multipart/form-data",还需要将表单的method属性设置为"post"

 代码如下 复制代码


...

为了能使用户能够选择文件上传,表单中至少应该提供一个<input type="file">字段:

 代码如下 复制代码


Choose a file to Upload:

在浏览器显示的效果:

使用Struts 2框架上传文件的准备工作  

第一步、在JSP页面中使用Struts 2标签库中的file标签,给它取一个容易理解的名字,若要上传多个文件就必须使用多个file标签,但它们的名字必须相同:

 代码如下 复制代码






Struts 2的file标签,在浏览器中会被映射为<input type="file" name="attachment">。

第二步、创建接收上传文件信息的动作类。该动作类被约定为必须带有3个属性,并且这三个属性的命名必须符合是下面的规定

这里的[inputName]是表单上file标签的名字,例如,file标签的name="attachment",你的这三个属性的名字必须命名为attachmentFile、attachmentFileName和attachmentContentType。

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • Xml、Json序列化

    Xml、Json序列化

    2017-05-04 10:00

  • Android框架之路Json解析一篇就够(原生技术+Gson+FastJson)

    Android框架之路Json解析一篇就够(原生技术+Gson+FastJson)

    2017-05-04 09:05

  • Python flask博客程序,response与json哪种好

    Python flask博客程序,response与json哪种好

    2017-05-03 16:03

  • Sparksql语法,读json

    Sparksql语法,读json

    2017-05-03 11:06

网友点评
i