要序列化为对象的XML内容:标签与对象属性一定要一一对应
<com.strato.sboot.query.api.v1__0__0.model.Query>
<condition>
<fields>
<com.strato.sboot.query.api.v1__0__0.model.Condition_-Field>
<label>姓名</label>
<name>paramName</name>
<element class="com.strato.sboot.ui.api.v1_0_0.Text">
<id>001</id>
<name>text</name>
<value>张三</value>
<readonly>false</readonly>
<disabled>false</disabled>
<validateRules>NOTNULL,NUMBER,MAX(100)</validateRules>
</element>
</com.strato.sboot.query.api.v1__0__0.model.Condition_-Field>
<com.strato.sboot.query.api.v1__0__0.model.Condition_-Field>
<label>门诊号</label>
<name>paramClinicNumber</name>
<element class="com.strato.sboot.ui.api.v1_0_0.Text">
<id>001</id>
<name>text</name>
<value>maz001</value>
<readonly>false</readonly>
<disabled>false</disabled>
<validateRules>只能是中文和英文</validateRules>
</element>
</com.strato.sboot.query.api.v1__0__0.model.Condition_-Field>
<com.strato.sboot.query.api.v1__0__0.model.Condition_-Field>
<label>住院号</label>
<name>paramHospitalizationNumber</name>
<element class="com.strato.sboot.ui.api.v1_0_0.Text">
<id>001</id>
<name>text</name>
<value>zyh001</value>
<readonly>false</readonly>
<disabled>false</disabled>
<validateRules>只能是中文和英文</validateRules>
</element>
</com.strato.sboot.query.api.v1__0__0.model.Condition_-Field>
<com.strato.sboot.query.api.v1__0__0.model.Condition_-Field>
<label>年龄</label>
<name>paramBirthday</name>
<element class="com.strato.sboot.ui.api.v1_0_0.DatePicker">
<id>001</id>
<name>datepicker</name>
<value>5</value>
<readonly>false</readonly>
<disabled>false</disabled>
<validateRules></validateRules>
<pattern>yyyy-MM-dd</pattern>
</element>
</com.strato.sboot.query.api.v1__0__0.model.Condition_-Field>
<com.strato.sboot.query.api.v1__0__0.model.Condition_-Field>
<label>诊断</label>
<name>diagnosis</name>
<element class="com.strato.sboot.ui.api.v1_0_0.Select">
<id>001</id>
<name>select</name>
<value></value>
<readonly>false</readonly>
<disabled>false</disabled>
<validateRules></validateRules>
<dataId>getDiagnosisDataId</dataId>
<displayField>text</displayField>
<valueField>name</valueField>
<multiple>true</multiple>
</element>
</com.strato.sboot.query.api.v1__0__0.model.Condition_-Field>
<com.strato.sboot.query.api.v1__0__0.model.Condition_-Field>
<label>民族</label>
<name>nation</name>
<element class="com.strato.sboot.ui.api.v1_0_0.Select">
<id>001</id>
<name>select</name>
<value>1</value>
<readonly>false</readonly>
<disabled>false</disabled>
<validateRules></validateRules>
<dataId>getNationDataId</dataId>
<displayField>text</displayField>
<valueField>name</valueField>
<multiple>false</multiple>
</element>
</com.strato.sboot.query.api.v1__0__0.model.Condition_-Field>
</fields>
<exportExcel>true</exportExcel>
</condition>
</com.strato.sboot.query.api.v1__0__0.model.Query>
源码(简陋):
import com.strato.beans.v1_0_0.BeanLifeCycle;
import com.strato.classloader.v1_0_0.OverallBundleContextClassLoader;
import com.strato.serializer.xstream.v1_0_0.impl.ObjectXStreamSerializer;
@Controller
public class QueryController implements BeanLifeCycle {//1.第一步 实现 BeanLifeCycle
private ObjectXStreamSerializer serializer=new ObjectXStreamSerializer(); //2.第二步
@SuppressWarnings({ "unchecked", "rawtypes" })
@RequestMapping("/system/condition/index")
@MenuItem(icon = "am-icon-table sidebar-nav-link-logo", order = 1, text = "条件管理", path = "/system/condition")
public void index(HttpServletRequest request, HttpServletResponse response, ModelAndView mav) {
List<Query> queryList = queryService.list();
Pagination pagination = new Pagination();
String pageIndex = request.getParameter("pageIndex");
if (StringUtils.isNotBlank(pageIndex)) {
pagination.setPageIndex(Long.valueOf(pageIndex));
} else {
pagination.setPageIndex(1L);
}
pagination.setPageSize(20);
pagination.setParams(new HashMap<>());
pagination.setResult(queryList);
mav.getModel().put("pagination", pagination);
mav.setViewName("index");
}
@RequestMapping("/system/condition/entity/add")
public String addview(HttpServletRequest request, HttpServletResponse response, ModelAndView mav) {
return "entity.add";
}
@RequestMapping("/system/condition/entity/save")
public View save(HttpServletRequest request, HttpServletResponse response, ModelAndView mav) {
String jsonInfo = request.getParameter("info");
try {
Query query = (Query) JSONUtils.getInstance().fromJSON2Object(jsonInfo, Query.class);
//开始使用序列化 系列化为对象
//query.getSql()内容为XMl字符串
Query query1 = (Query) serializer.deserialize(new StringReader(query.getSql()));
query1.setId(query.getId());
query1.setName(query.getName());
query1.setDescription(query.getDescription());
queryService.saveQuery(query1);
} catch (Exception e) {
e.printStackTrace();
return JsonView.fromObject(ResultVOUtil.error(ResultEnum.ERROR.getCode(), "序列化异常,请检查XML内容是否正确"));
}
return JsonView.fromObject(ResultVOUtil.success());
}
@RequestMapping("/system/condition/entity/detail")
public String infoview(HttpServletRequest request, HttpServletResponse response, ModelAndView mav) {
String queryId = request.getParameter("queryId");
Query query = queryService.loadQuery(queryId);
StringWriter writer=new StringWriter();
try {
serializer.serialize(query, writer);//序列化为xml格式字符串
} catch (IOException e) {
e.printStackTrace();
}
String json=writer.toString();//序列化结果
query.setSql(json);
mav.getModel().put("query", query);
return "entity.view";
}
@Override
public void destroy() {
}
@Override
public void init() {
serializer.setClassLoader(OverallBundleContextClassLoader.getInstance()); //3.第三步
}
}