spring boot构建REST API并用RestTemplate进行测试

spring boot构建REST API并用RestTemplate进行测试

  1. 创建spring boot项目
  2. 完成相关配置,如数据库配置等
  3. 创建一个实体
  4. 编写controller,service,dao层
  5. 测试

1 创建spring boot项目

spring boot + mongodb

1.1 引入常用依赖

		<dependency>
			<!-- 热部署依赖 -->
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
		</dependency>
 		<dependency>
		<!-- lombook -->
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<scope>provided</scope>
		</dependency>
 		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-mongodb</artifactId>
		</dependency>

2 完成相关配置,如数据库配置等

#普通属性值配置
server.port=8080
server.servlet.context-path=/reporting
#mongdb配置
spring.data.mongodb.uri=mongodb://localhost:27017/test

3 创建一个实体

package com.reporting.entity;

import java.io.Serializable;

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.stereotype.Component;

import lombok.Data;


@Data
@Component	
@Document(collection = "reporting")
public class DiagnoseReport implements Serializable{
	@Id
	private String id;
	private String patientMail;
	private String doctorMail;
	private String description;
	private String medicine;
	private String reportTime;
}

4 编写controller,service,dao层

4.1 controller

package com.reporting.controller;

import java.util.Date;
import java.util.List;
import java.util.Optional;

import org.omg.PortableServer.IdAssignmentPolicy;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.reporting.entity.DiagnoseReport;
import com.reporting.service.ReportService;

import lombok.Data;

@RestController
@RequestMapping("/users")
public class ReportController {

	@Autowired
	private ReportService reportService;

	@GetMapping("/mail={mail}")
	public List<DiagnoseReport> getReportByPatientName(@PathVariable String mail) {
		List<DiagnoseReport> diagnoseReports = reportService.getReportByPatientName(mail);
		System.out.println(diagnoseReports);
		return diagnoseReports;
	}

	@GetMapping("/id={id}")
	public Optional<DiagnoseReport> getReportById(@PathVariable String id) {
		return reportService.getReportById(id);
	}

	@GetMapping("/all")
	public List<DiagnoseReport> getAllReports() {
		return reportService.findAllDiagnoseReports();
	}

	@GetMapping("/update/id={id}")
	public boolean updateReport(@PathVariable String id) {
		DiagnoseReport diagnoseReport = new DiagnoseReport();
		diagnoseReport.setId(id);
		diagnoseReport.setDescription("123456");
		diagnoseReport.setDoctorMail("123@qq.com");
		diagnoseReport.setMedicine("123");
		diagnoseReport.setPatientMail("456@qq.com");
		Date date = new Date();
		diagnoseReport.setReportTime(date.toString());
		return reportService.updateReport(diagnoseReport);
	}
	
	@GetMapping("/delete/id={id}")
	public boolean deleteReportById(@PathVariable String id) {
		return reportService.deleteById(id);
	}
	
	@GetMapping("add")
	public boolean addReport() {
		DiagnoseReport diagnoseReport = new DiagnoseReport();
		diagnoseReport.setDescription("描述");
		diagnoseReport.setDoctorMail("11111@163.com");
		diagnoseReport.setMedicine("药物");
		diagnoseReport.setPatientMail("aaaaaa@qq.com");
		Date date = new Date();
		diagnoseReport.setReportTime(date.toString());
		return reportService.addReport(diagnoseReport);
	}

}

4.2 service

package com.reporting.service;

import java.util.List;
import java.util.Optional;

import org.bson.Document;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Service;

import com.reporting.dao.ReportDao;
import com.reporting.entity.DiagnoseReport;

@Service
public class ReportService {
	@Autowired
	private ReportDao reportDao;
	@Autowired
	private MongoTemplate mongoTemplate;

	public List<DiagnoseReport> getReportByPatientName(String mail) {
		// 创建条件对象
		Criteria criteria = Criteria.where("patientMail").is(mail);
		// 创建查询对象,然后将条件对象添加到其中
		Query query = new Query(criteria);
		// 查询并返回结果
		List<DiagnoseReport> reportList = mongoTemplate.find(query, DiagnoseReport.class);

		return reportList;

	}

	public Optional<DiagnoseReport> getReportById(String id) {
		return reportDao.findById(id);
	}

	public List<DiagnoseReport> findAllDiagnoseReports() {
		return reportDao.findAll();
	}

	public boolean updateReport(DiagnoseReport report) {
		try {
			Query query = new Query(Criteria.where("id").is(report.getId()));
			Document doc = new Document(); // org.bson.Document
			mongoTemplate.getConverter().write(report, doc);
			Update update = Update.fromDocument(doc);
//			mongoTemplate.upsert(query, update, "report");
			mongoTemplate.updateFirst(query, update, DiagnoseReport.class);
		} catch (Exception e) {
			// TODO: handle exception
			System.out.println(e);
			return false;
		}
		return true;
	}

	public boolean deleteById(String id) {
		try {
			Criteria criteria = Criteria.where("id").is(id);
			Query query = new Query(criteria);
			// 执行删除查找到的匹配的第一条文档,并返回删除的文档信息
			mongoTemplate.findAndRemove(query, DiagnoseReport.class);
		} catch (Exception e) {
			// TODO: handle exception
			System.out.println(e);
			return false;
		}
		return true;
	}
	
	public boolean addReport(DiagnoseReport report) {
		try {
			mongoTemplate.save(report);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return false;
		}
		return true;
	}
}

4.3 dao

package com.reporting.dao;

import org.springframework.data.mongodb.repository.MongoRepository;

import com.reporting.entity.DiagnoseReport;

public interface ReportDao extends MongoRepository<DiagnoseReport, String>{
	
}

5 测试

5.1 使用RestTemplate测试暴露在外的rest API接口

一般情况下有如下三种http客户端工具类包都可以方便的进行http服务调用:

  • httpClient
  • okHttp
  • JDK原生URLConnection

spring提供了RestTemplate的工具类对上述的3种http客户端工具类进行了封装,可在spring项目中使用RestTemplate进行服务调用。|

package com.reporting;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;

import com.reporting.entity.DiagnoseReport;

//调用rest API进行增删改查操作

@SpringBootTest
public class RestTemplateTest {
	@Autowired
	private RestTemplate restTemplate;

	@Test
	public void findById() {
		// 返回一个对象
		String url = "http://localhost:8080/reporting/users/id=0";
		// restTemplate可以对json格式字符串反序列化
		ResponseEntity<DiagnoseReport> report = restTemplate.getForEntity(url, DiagnoseReport.class);
		System.out.println(report);
		DiagnoseReport objects = report.getBody();
		System.out.println(objects);
	}

	@Test
	public void findAll() {
		// 返回一个对象列表
		String url = "http://localhost:8080/reporting/users/all";
		ResponseEntity<DiagnoseReport[]> forEntity = restTemplate.getForEntity(url, DiagnoseReport[].class);
		DiagnoseReport[] body = forEntity.getBody();
		for (DiagnoseReport diagnoseReport : body) {
			System.out.println(diagnoseReport);
		}
	}

	@Test
	public void update() {
		// 返回一个对象列表
		String url = "http://localhost:8080/reporting/users/update/id=5f8258b4e609c76b611634b6";
		// 查找该id对应对象是否存在
		ResponseEntity<Boolean> forEntity = restTemplate.getForEntity(url, Boolean.class);
		Boolean body = forEntity.getBody();
		if (body == true) {
			System.out.println("更新成功");
		} else {
			System.out.println("更新失败");
		}
	}

	@Test
	public void delete() {
		// 返回一个对象列表
		String url = "http://localhost:8080/reporting/users/delete/id=5f6aaa218a379a38a31ec2e8";
		// 查找该id对应对象是否存在
		ResponseEntity<Boolean> forEntity = restTemplate.getForEntity(url, Boolean.class);
		Boolean body = forEntity.getBody();
		if (body == true) {
			System.out.println("删除成功");
		} else {
			System.out.println("删除失败");
		}
	}
	@Test
	public void add() {
		String url = "http://localhost:8080/reporting/users/add";
		ResponseEntity<Boolean> forEntity = restTemplate.getForEntity(url, Boolean.class);	
		Boolean body = forEntity.getBody();
		if (body == true) {
			System.out.println("增加成功");
		} else {
			System.out.println("增加失败");
		}
	}

}

5.2 结果

测试结果

在这里插入图片描述

浏览器访问

在这里插入图片描述

6 参考

https://dzone.com/articles/how-to-create-rest-api-with-spring-boot

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值