将json对象转为xml进行操作属性

将json对象转为xml进行操作属性

文章目录

    • 将json对象转为xml进行操作属性
      • 前端发送json数据格式
      • 写入数据库格式-content字段存储(varchar(2000))
      • Question实体类-接口映射对象
      • QuestionContent 接收参数对象
      • DAO持久层
      • Mapper层
      • Service层
      • Controller控制层接收
      • xml与对象互转处理
      • pom.xml引入
      • 查询功能-xml以json返回页面

前端发送json数据格式

{
    "questionContent": {
        "title": "3. Fran正在构建一个取证分析工作站,并正在选择一个取证磁盘控制器将其包含在设置中。 以下哪些是取证磁盘控制器的功能? (选择所有适用的选项。)",
        "choiceImgList": {},
        "choiceList": {
            "A": "A. 防止修改存储设备上的数据",
            "B": "B. 将数据返回给请求设备",
            "C": "C. 将设备报告的错误发送给取证主机",
            "D": "D. 阻止发送到设备的读取命令"
        }
    }
}

写入数据库格式-content字段存储(varchar(2000))

在这里插入图片描述

content字段落入库中的格式

<QuestionContent>
  <title>Lisa正在试图防止她的网络成为IP欺骗攻击的目标,并防止她的网络成为这些攻击的源头。 以下哪些规则是Lisa应在其网络边界配置的最佳实践?(选择所有适用的选项)
</title>
  <titleImg></titleImg>
  <choiceList>
    <entry>
      <string>A</string>
      <string>阻止具有内部源地址的数据包进入网络</string>
    </entry>
    <entry>
      <string>B</string>
      <string>阻止具有外部源地址的数据包离开网络</string>
    </entry>
    <entry>
      <string>C</string>
      <string>阻止具有公共IP地址的数据包进入网络</string>
    </entry>
    <entry>
      <string>D</string>
      <string> 阻止带有私有IP地址的数据包离开网络</string>
    </entry>
  </choiceList>
  <choiceImgList/>
</QuestionContent>

Question实体类-接口映射对象

@XmlRootElement指定一个类为 XML 根元素。JAXB 是一种允许 Java 开发者将 Java 对象映射为 XML 表示形式,以及从 XML 还原为 Java 对象的技术。
Question 类被注解为 XML 根元素。当你使用 JAXB 序列化一个 Question 对象时,它将生成一个以 <Question> 为根元素的 XML 文档

import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Question implements Serializable {

	private String content;
	private QuestionContent questionContent;
	
}

QuestionContent 接收参数对象

使用@XStreamAlias("QuestionContent")为类指定别名。例如,为QuestionContent类指定别名,当使用XStream序列化对象时,<QuestionContent类指定别名>将作为根元素,而<title>将作为name字段的元素名。


import com.thoughtworks.xstream.annotations.XStreamAlias;

@XStreamAlias("QuestionContent")
public class QuestionContent {

	@XStreamAlias("title")
	private String title;
	@XStreamAlias("titleImg")
	private String titleImg = "";
	@XStreamAlias("choiceList")
	private LinkedHashMap<String, String> choiceList;
	@XStreamAlias("choiceImgList")
	private LinkedHashMap<String, String> choiceImgList;

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getTitleImg() {
		return titleImg;
	}

	public void setTitleImg(String titleImg) {
		this.titleImg = titleImg;
	}

	public LinkedHashMap<String, String> getChoiceList() {
		return choiceList;
	}

	public void setChoiceList(LinkedHashMap<String, String> choiceList) {
		this.choiceList = choiceList;
	}

	public LinkedHashMap<String, String> getChoiceImgList() {
		return choiceImgList;
	}

	public void setChoiceImgList(LinkedHashMap<String, String> choiceImgList) {
		this.choiceImgList = choiceImgList;
	}

}

DAO持久层

public interface QuestionMapper {

	public void insertQuestion(Question question) throws Exception;
	
	public void addQuestionKnowledgePoint(@Param("questionId") int questionId,
			@Param("pointId") int pointId) throws Exception;
}	

Mapper层

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.extr.persistence.QuestionMapper">

<insert id="addQuestionKnowledgePoint">
		insert into et_question_2_point
		(question_id,point_id)
		values
		(#{questionId},#{pointId})
	</insert>

	<insert id="insertQuestion" parameterType="com.extr.domain.question.Question"
		useGeneratedKeys="true" keyProperty="id">
		insert into et_question
		(name,content,question_type_id,create_time,creator,
		answer,analysis,reference,examing_point,keygetQuestionListword,points)
		values
		(#{name},#{content},#{question_type_id},#{create_time},#{creator},
		#{answer},#{analysis},#{referenceName},#{examingPoint},#{keyword},#{points})
	</insert>
</mapper>	

Service层

	
@Service("questionService")
public class QuestionServiceImpl implements QuestionService {	

    @Autowired
	private QuestionMapper questionMapper;
    
	@Override
	@Transactional
	public void addQuestion(Question question) {
		// TODO Auto-generated method stub
		try {
			questionMapper.insertQuestion(question);
			for (Integer i : question.getPointList()) {
				questionMapper.addQuestionKnowledgePoint(question.getId(), i);
			}
		} catch (Exception e) {
			throw new RuntimeException(e.getMessage());
		}
	}
}
		

Controller控制层接收

import com.extr.util.xml.Object2Xml;	
@Controller
public class QuestionController {

	@RequestMapping(value = "/admin/questionAdd", method = RequestMethod.POST)
	public @ResponseBody Message addQuestion(@RequestBody Question question) {
	
		question.setContent(Object2Xml.toXml(question.getQuestionContent()));
		Message message = new Message();
		try {
			questionService.addQuestion(question);
		} catch (Exception e) {
			message.setResult("error");
			log.Info(e.getClass().getName());
			log.info(e);
		}
		return message;
	}
}

xml与对象互转处理

package com.extr.util.xml;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;

public class Object2Xml {
	public static String toXml(Object obj){
		XStream xstream=new XStream();
		xstream.processAnnotations(obj.getClass());
		
		return xstream.toXML(obj);
	}
	
	public static <T> T toBean(String xmlStr,Class<T> cls){
		XStream xstream=new XStream(new DomDriver());
		xstream.processAnnotations(cls);
		@SuppressWarnings("unchecked")
		T obj=(T)xstream.fromXML(xmlStr);
		return obj;
	}

pom.xml引入

用于将Java对象序列化为XML,以及从XML反序列化为Java对象。它提供了一种直观的方式来处理Java对象和XML之间的转换,而无需编写大量的映射代码或配置。

		<!-- Xstream -->
		<dependency>
			<groupId>com.thoughtworks.xstream</groupId>
			<artifactId>xstream</artifactId>
			<version>1.4.2</version>
		</dependency>

查询功能-xml以json返回页面

public class QuestionAdapter {
    
	private QuestionContent questionContent;
    
    @GetMapping("/some-endpoint")  
    public @ResponseBody String getQuestionContentAsJson((Question question)) {  
         
        this.questionContent = Object2Xml.toBean(question.getContent(),
                        QuestionContent.class);
        question.setQuestionContent(this.questionContent);
        try {  
            return objectMapper.writeValueAsString(this.questionContent);  
        } catch (Exception e) {  
            // 处理异常并返回适当的错误响应  
        }  
        // 如果没有错误,但您仍然想返回一个默认的或空的JSON,您可以这样做:  
        return question; // 或任何其他您想要的默认JSON  
    }
}    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/756251.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

6月26日-时间记录和统计

首先&#xff0c;我们根据你提供的时间记录&#xff0c;将活动进行分类并计算每个类别的持续时间&#xff0c;然后计算它们各自所占的百分比。以下是具体的分类和计算步骤&#xff1a; 1. **思想活动**&#xff1a; - 持续时间&#xff1a;15分48秒 2. **学习活动**&#xff1a…

Java代码基础算法练习-计算看完一本书的天数-2024.06.29

任务描述&#xff1a; 一本书有 n 页&#xff0c;小明第一天看 1 页&#xff0c;以后每天都比前一天多看 2 页&#xff0c;计算小明看完整本书 需要多少天&#xff1f; 解决思路&#xff1a; 每天都比前一天多看 2 页&#xff0c;输入的页数 n 为判断标准&#xff0c;while 循…

堆排序思想分享

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

SAP ATP可用性检查简介

Availability Check,就是可用性检查,指的是要检查一下此物料是否能满足我的需求。 接到一张销售订单(SALES ORDER),客户要求数量为100PC,并且客户要求的出货日期是2024-07-01,此时我们的销售人员肯定会想到底能否出货给客人呢?系统中建立此单时,SAP就会做一个所谓的检…

一键掌控,文件格式转换无忧!轻松驾驭各种文件格式,高效管理您的数字世界

信息爆炸的时代&#xff0c;我们每天都会接触到各种各样的文件格式。无论是工作文档、图片、视频还是音频文件&#xff0c;它们都以不同的格式存在于我们的电脑和移动设备中。然而&#xff0c;不同的软件和应用往往只支持特定的文件格式&#xff0c;这给我们的工作和生活带来了…

Petal-X :心血管疾病临床风险可视化工具

心血管疾病&#xff08;Cardiovascular diseases, CVDs&#xff09;是全球致死的首要原因&#xff0c;但在大多数情况下&#xff0c;它们是可以通过行为干预来预防的。因此&#xff0c;在个体层面上&#xff0c;有效地传达心血管疾病的风险以及通过风险因素的修改来预计风险降低…

【股指期权投教】一手股指期权大概多少钱?

一手股指期权的权利金大概在几千人民币左右&#xff0c;如果是作为期权卖方还需要另外缴纳保证金的。国内的股指期权有三种&#xff0c;沪深300、上证50、中证1000股指期权&#xff0c;每点合约人民币100 元。 期权合约的价值计算可以通过此公式得出&#xff1a;权利金的支付或…

一块KT板带来4.9万MGV,抖捧AI自动直播真有这么好?

相信大多数做抖音本地生活的朋友都了解&#xff0c;目前本地生活团购带货的方式主要分为两种&#xff0c;一种是短视频带货&#xff0c;由探店达人到店里打卡&#xff0c;然后拍视频发布到自己账号&#xff0c;同时挂载商家的门店定位或团购链接&#xff0c;用户可以直接在视频…

awk的用法

目录 awk简述 awk的用法 选项 内置变量 命令格式 打印行号 打印指定行 打印奇偶行 按行取列 BEGIN打印模式 乘法计算 awk -v 变量赋值 awk的条件判断 面试题awk的三元表达式 awk的精确筛选 逻辑且、或关系 awk做小数运算 curl 练习 1.获取其中的所有子域名…

WebSocket 连接失败的原因及解决方法

WebSocket 目前已经成为了一项极为重要的技术&#xff0c;其允许客户端和服务器之间进行实时、全双工的通信。然而&#xff0c;在实际项目中&#xff0c;开发者时常会遇到 WebSocket 连接失败的情况。这不仅影响了用户体验&#xff0c;还可能导致不可预见的系统错误或数据丢失。…

字节码编程ASM之插桩调用其他类的静态方法

写在前面 源码 。 本文看下通过ASM如何实现插桩调用其他类的静态方法。 1&#xff1a;编码 假定有如下的类&#xff1a; public class PayController {public void pay(int userId, int payAmount) {System.out.println("用户&#xff1a;" userId ", 调用…

mybatis框架介绍 , 环境的搭建和代码实现

1.mybatis框架介绍 mybatis框架介绍 mybatis是Apache软件基金会下的一个开源项目&#xff0c;前身是iBatis框架。2010年这个项目由apache 软件基金会迁移到google code下&#xff0c;改名为mybatis。2013年11月又迁移到了github(GitHub 是一个面向开源及私有 软件项目的托管平…

kafka--发布-订阅消息系统

1. Kafka概述 1. kafka是什么 kafka是分布式的、高并发的、基于发布/订阅模式的消息队列软件系统。 kafka中的重要组件 Producer&#xff1a;消息生产者&#xff0c;发布消息到Kafka集群的终端或服务Consume&#xff1a;消费者&#xff0c;从Kafka集群中消费消息的终端或服…

GPT-5

欢迎来到 Papicatch的博客 文章目录 &#x1f349;技术突破预测 &#x1f348;算法进步 &#x1f348;理解力提升 &#x1f348;行业推动力 &#x1f349;人机协作的未来 &#x1f348;辅助决策 &#x1f348;增强创造力 &#x1f348;复杂任务中的角色 &#x1f348;人…

构建以caffeine为L1,Redis为L2的多级缓存

&#x1f3c3;‍♂️ 微信公众号: 朕在debugger© 版权: 本文由【朕在debugger】原创、需要转载请联系博主&#x1f4d5; 如果文章对您有所帮助&#xff0c;欢迎关注、点赞、转发和订阅专栏&#xff01; 前言 S&#xff08;Situation&#xff09;&#xff1a;业务代码与缓存…

RK3588 Android13 TvSetting 中增加 WebView 切换菜单

前言 电视产品,客户要求在设置中设备偏好设置子菜单下增加一个 WebView切换菜单,一开始不知道怎么下手,后来想起来在设置开发者选项里有一个类似的菜单, 去把实现逻辑搞出来应该就ok。 效果图 TvSetting 部分修改文件清单 packages/apps/TvSettings/Settings/res/values…

改机软件有哪些?实现一键新机、改串号、改IMEI和手机参数的需求 硬改手机软件,新机环境模拟 设备伪装,一键改机,一键复原

这次针对可以直接开端口修改参数的机型做一些工具解析 前面接触合作过很多工作室。其中很多工作室对于各自软件的跳验证有各自的需求。 一个机型各项参数一般有IMEI WiFi 蓝牙 sn psb ESN等等。 针对这些参数的修改首先要明白各自软件检测的具体是哪些参数来验证。 对于常用…

在Ubuntu上配置PPPoE服务:从安装到自动化启动的全指南

在Ubuntu上配置PPPoE服务&#xff1a;从安装到自动化启动的全指南 PPPoE&#xff08;点对点协议以太网&#xff09;是一种广泛用于DSL和光纤宽带连接的协议。在本篇技术博客中&#xff0c;我们将详细介绍如何在Ubuntu系统上配置PPPoE服务&#xff0c;包括安装、配置、启动以及…

STM32——使用TIM输出比较产生PWM波形控制舵机转角

一、输出比较简介&#xff1a; 只有高级定时器和通用寄存器才有输入捕获/输出比较电路&#xff0c;他们有四个CCR&#xff08;捕获/比较寄存器&#xff09;&#xff0c;共用一个CNT&#xff08;计数器&#xff09;&#xff0c;而输出比较功能是用来输出PWM波形的。 红圈部分…

深入探索大模型的魅力:前沿技术、挑战与未来展望

目录 一、大模型的前沿技术 二、大模型面临的挑战 三、大模型的未来展望 四、总结 在当今人工智能领域&#xff0c;大模型不仅是一个热门话题&#xff0c;更是推动技术进步的重要引擎。从深度学习的浪潮中崛起&#xff0c;大模型以其卓越的性能和广泛的应用前景&#xff0c…