文章21 | 阅读 8246 | 点赞0
摘要: JAXB 作为JDK的一部分,能便捷地将Java对象与XML进行相互转换,本教程从实际案例出发来讲解JAXB 2 的那些事儿。完整版目录
前面的章节,已经把JAXB的各种使用细节讲清楚了。但是真正掌握,还需要深入到项目中体验一下。
这一节开始,将开始专注于JAXB 在 Spring项目中的使用情况,为了能快速构建Spring项目,我使用了Spring Boot 来搭建工程。
我使用了最基本的spring-boot-starter-web
,也就是说,项目中除了parent+web-starter没有其他多于依赖。
完整的pom.xml文件如下。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.training</groupId>
<artifactId>jaxb</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>jaxb-example</name>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
在项目的最上层包中创建Spring boot的启动类:
package com.example.demo;
@SpringBootApplication
public class WebApplication {
public static void main(String[] args) {
SpringApplication.run(WebApplication.class, args);
}
}
如果本身创建的就是SpringBoot项目,这一步是不需要的。注意该类所在的包需要在工程最顶层。
首先需要一个实体类,这里模拟一个学生管理系统。创建Java bean Student
package com.example.demo.lesson20.entity;
public class Student {
private String id;
private String name;
private Integer age;
// ignore setters,getters,toString()
}
学生类有三个字段,为了节省篇幅,我省略了setter,getter方法。
服务层是所有的逻辑代码,我没有创建数据访问层,模拟的数据存放在Map 集合中。使用了静态代码块来初始化数据,默认Map的key就是实体类的id,方便查询操作。
package com.example.demo.lesson20.service;
@Service
public class StudentService {
static Map<String, Student> students = new HashMap<>();
static {
students.put("11", new Student("11", "Tom", 23));
students.put("12", new Student("12", "Jerry", 25));
students.put("13", new Student("13", "David", 32));
students.put("14", new Student("14", "Jack", 41));
}
public Student findById(String id) {
return students.get(id);
}
}
这里的方法 findById()
是需要我们通过id查找对应的学生信息,这在真实项目中非常常见。需要注意返回值是对应的Java bean。
SpringBoot推荐我们通过暴露Http接口的方式供外部访问,我使用@RestController
来标注 Controller 层,而这里的@RestController
并没有什么特殊的,它只是包装了之前常见的两个注解:@Controller
,@ResponseBody
。
package com.example.demo.lesson20.web;
@RestController
@RequestMapping("/student")
public class StudentController {
@Autowired
private StudentService studentService;
@GetMapping(value="/id")
public Student findById(String id) {
return studentService.findById(id);
}
}
我的第一个方法很简单,映射的路径格式为 contextPath/student/id?id=xx
,需要注意返回值类型为Student
。
看到控制台输出Started WebApplication in 5.816 seconds (JVM running for 7.372)
,项目已经启动成功。
在浏览器中访问: http://localhost:8080/student/id?id=11
可以正确的返回Json格式的数据。
为什么返回的是JSON格式,通过浏览器的调试窗口查看一下,返回的Content-Type
为’application/json;charset=UTF-8’。原来,Spring在处理返回数据的时候,已经为请求加上返回类型。
在之前的基础上,还有一个需求,返回所有学生信息。因此在之前的Service层代码上添加如下代码:
StudentService.java
public List<Student> findAll() {
return new ArrayList<Student>(students.values());
}
这里把Map中所有的 values 数据转换为了ArrayList<Student>
类型,返回数据类型为List<Student>
。
StudentController.java
@GetMapping(value="/list")
public List<Student> findAll(){
return studentService.findAll();
}
和之前的查询单个数据一样,返回多个数据看起来更简单,不过需要注意,返回数据类型为List<Student>
。
重启项目,看到控制台输出Started WebApplication in 5.816 seconds (JVM running for 7.372)
,项目已经启动成功。
在浏览器中访问: http://localhost:8080/student/list
可以正确的返回Json格式的数据。
可以在GitHub找到完整代码。
本节代码均在该包下:package com.example.demo.lesson20;
这一节主要是搭建SpringBoot项目的骨架,演示了如何快速实现一套restful接口,返回的数据类型是JSON。看起来没有什么特殊处理,Spring对JSON数据友好地支持了。
下一节将从这两个例子出发,看一下返回XML数据需要如何处理。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://jiangchao.blog.csdn.net/article/details/85109888
内容来源于网络,如有侵权,请联系作者删除!