作业2-实现设备列表的前端展示

作业原题

将下面的代码按照springboot分层解耦的机制进行改写,实现设备列表的前端展示。

@RestController
public class DeviceController {
    @RequestMapping("/listDev")
    public Result list(){
        //1. 加载并解析emp.xml
        String file = this.getClass().getClassLoader().getResource("devices.xml").getFile();
        System.out.println(file);
        List<Device> devList = XmlParserUtils.parse(file, Device.class);
        System.out.println(devList);

        //2. 对数据进行转换处理 - DevState
        devList.stream().forEach(dev -> {
            //处理 DevState 1: 开, 0: 关
            String state = dev.getDevState();
            if("1".equals(state)){
                dev.setDevState("开");
            }else if("0".equals(state)){
                dev.setDevState("关");
            }
        });
        //3. 响应数据
        return Result.success(devList);
    }
}

解决步骤:

创建pojo包,包内创建Device和Result类

Result类代码如下

public class Result {
    private Integer code ;//1 成功 , 0 失败
    private String msg; //提示信息
    private Object data; //数据 data

    public Result() {
    }
    public Result(Integer code, String msg, Object data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }
    public Integer getCode() {
        return code;
    }
    public void setCode(Integer code) {
        this.code = code;
    }
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
    public Object getData() {
        return data;
    }
    public void setData(Object data) {
        this.data = data;
    }

    public static Result success(Object data){
        return new Result(1, "success", data);
    }
    public static Result success(){
        return new Result(1, "success", null);
    }
    public static Result error(String msg){
        return new Result(0, msg, null);
    }

    @Override
    public String toString() {
        return "Result{" +
                "code=" + code +
                ", msg='" + msg + '\'' +
                ", data=" + data +
                '}';
    }
}

将所需文件移入项目内

移入前:

移入后:

创建工具包

代码如下

package com.dfq.utils;

import java.io.File;
import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class XmlParserUtils {

    public static <T> List<T> parse(String file , Class<T> targetClass)  {
        ArrayList<T> list = new ArrayList<T>(); //封装解析出来的数据
        try {
            //1.获取一个解析器对象
            SAXReader saxReader = new SAXReader();
            //2.利用解析器把xml文件加载到内存中,并返回一个文档对象
            Document document = saxReader.read(new File(file));
            //3.获取到根标签
            Element rootElement = document.getRootElement();
            //4.通过根标签来获取 user 标签
            List<Element> elements = rootElement.elements("dev");

            //5.遍历集合,得到每一个 user 标签
            for (Element element : elements) {
                //获取 name 属性
                String devName = element.element("devName").getText();
                //获取 age 属性
                String devID = element.element("devID").getText();
                //获取 image 属性
                String image = element.element("image").getText();
                //获取 gender 属性
                String userName = element.element("userName").getText();
                //获取 job 属性
                String devState = element.element("devState").getText();

                //组装数据
                Constructor<T> constructor = targetClass.getDeclaredConstructor(String.class, String.class, String.class, String.class, String.class);
                constructor.setAccessible(true);
                T object = constructor.newInstance(devName,devID, image, userName, devState);

                list.add(object);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }

}

需要添加依赖,找到以下文件

在dependencies标签内写入

<dependency>
    <groupId>org.dom4j</groupId>
    <artifactId>dom4j</artifactId>
    <version>2.1.3</version>
</dependency>

点击刷新:

创建DeviceServer接口 并声明两个方法

一个用于读取并解析xml文件,一个用于状态转换

实现接口中声明的方法

package com.dfq.server.Impl;


import com.dfq.pojo.Device;
import com.dfq.server.DeviceServer;
import com.dfq.utils.XmlParserUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Objects;

@Component
public class DeviceImpl implements DeviceServer {

    @Override
    public List<Device> getXml(String url) {
        String file = Objects.requireNonNull(this.getClass().getClassLoader().getResource(url)).getFile();
        System.out.println(file);
//        得到xml文件的路径 并赋值给file
//        读取xml文件的资源并赋值到链表
        List<Device> devList = XmlParserUtils.parse(file, Device.class);
        return devList;
    }

    @Override
    public List<Device> tran(List<Device> devList) {
        devList.forEach(dev -> {
            //处理 DevState 1: 开, 0: 关
            String state = dev.getDevState();
            if("1".equals(state)){
                dev.setDevState("开");
            }else if("0".equals(state)){
                dev.setDevState("关");
            }
        });
        return devList;
    }
}

在DeviceController调用xml解析和状态转换方法

package com.dfq.controller;
import com.dfq.pojo.Device;
import com.dfq.pojo.Result;
import com.dfq.server.DeviceServer;
import com.dfq.utils.XmlParserUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

//import javax.xml.transform.Result;
import java.util.List;
import java.util.Objects;

@RestController
public class DeviceController {

    @Autowired
    private DeviceServer deviceServer;
        @RequestMapping("/listDev")
        public Result listDev(){
           List<Device> list = deviceServer.getXml("devices.xml");
           list = deviceServer.tran(list);
           return Result.success(list);


        }

}

运行SpringBoot项目 打开浏览器 转到localhost:8080/dev.html

显示成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值