Spring Boot Service 组件

服务(Service)组件是包含 @Service 注解的类文件。 这些类文件用于在不同的层中编写业务逻辑,与 @RestController 类文件分开。创建服务组件类文件的逻辑如下所示

public interface ProductService {
}

实现带有@Service注解的接口的类如下

@Service
public class ProductServiceImpl implements ProductService {
}

请注意,在本教程中,我们使用 Product 服务 API 来存储、检索、更新和删除商品。 我们在 @RestController 类文件本身中编写了业务逻辑。 现在,我们要将业务逻辑代码从控制器移动到服务组件。

我们可以使用如下所示的代码创建一个包含添加、编辑、获取和删除方法的接口

package com.study.service;

import com.study.model.Product;

import java.util.Collection;

/**
 * @author jiyik.com
 */
public interface ProductService {
    public abstract void createProduct(Product product);
    public abstract void updateProduct(String id, Product product);
    public abstract void deleteProduct(String id);
    public abstract Collection<Product> getProducts();
}

我们将使用以下代码创建一个类,该类使用 @Service 注解实现 ProductService 接口,并编写业务逻辑来存储、检索、删除和更新商品。

package com.study.service;

import com.study.model.Product;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

/**
 * @author jiyik.com
 */
public class ProductServiceImpl implements ProductService {

    private static Map<String, Product> productRepo = new HashMap<>();

    static {
        Product honey = new Product();

        honey.setId("1");
        honey.setName("Honey");
        productRepo.put(honey.getId(), honey);

        Product almond = new Product();
        almond.setId("2");
        almond.setName("Almond");
        productRepo.put(almond.getId(), almond);
    }

    @Override
    public void createProduct(Product product) {
        productRepo.put(product.getId(), product);
    }

    @Override
    public void updateProduct(String id, Product product) {
        productRepo.remove(id);
        product.setId(id);
        productRepo.put(id, product);
    }

    @Override
    public void deleteProduct(String id) {
        productRepo.remove(id);
    }

    @Override
    public Collection<Product> getProducts() {
        return productRepo.values();
    }
}

下面的代码显示了 Rest Controller 类文件,这里我们 @Autowired 了 ProductService 接口并调用了方法。

package com.study.controller;

import com.study.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.study.model.Product;

@RestController
public class ProductServiceController {
    @Autowired
    ProductService productService;

    @RequestMapping(value = "/products/{id}", method = RequestMethod.PUT)
    public ResponseEntity<Object> updateProduct(@PathVariable("id") String id, @RequestBody Product product) {
        productService.updateProduct(id, product);
        return new ResponseEntity<>("商品更新成功", HttpStatus.OK);
    }

    @RequestMapping(value = "/products/{id}", method = RequestMethod.DELETE)
    public ResponseEntity<Object> delete(@PathVariable("id") String id) {
        productService.deleteProduct(id);
        return new ResponseEntity<>("商品删除成功", HttpStatus.OK);
    }

    @RequestMapping(value = "/products", method = RequestMethod.POST)
    public ResponseEntity<Object> createProduct(@RequestBody Product product) {
        productService.createProduct(product);
        return new ResponseEntity<>("商品创建成功", HttpStatus.CREATED);
    }

    @RequestMapping(value = "/products")
    public ResponseEntity<Object> getProduct() {
        return new ResponseEntity<>(productService.getProducts(), HttpStatus.OK);
    }
}

POJO 类的代码 - Product.java 如下所示

package com.study.model;

/**
 * @author jiyik.com
 */
public class Product {
    private String id;
    private String name;

    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

下面给出了一个主要的 Spring Boot 应用程序

package com.study;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

/**
 * @author jiyik.com
 */
@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

Maven build – 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.spring</groupId>
    <artifactId>springBootProject</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.6</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

Gradle Build 的代码 - build.gradle 如下所示

buildscript {
   ext {
      springBootVersion = '1.5.8.RELEASE'
   }
   repositories {
      mavenCentral()
   }
   dependencies {
      classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
   }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'

group = 'com.study'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
   mavenCentral()
}
dependencies {
   compile('org.springframework.boot:spring-boot-starter-web')
   testCompile('org.springframework.boot:spring-boot-starter-test')
}

这里我们使用 IDEA 来启动服务(读者也可以使用 mvn clean install 或者 gradle clean build 生成可执行jar包)

spring boot 异常处理 IDEA启动服务

这将在 Tomcat 端口 8080 上启动应用程序,如下所示

Spring Boot 启动8080端口

现在在 apifox 应用程序中点击下面显示的 URL 并查看输出。

GET API 获取商品 URL : http://localhost:8080/products

apifox 请求spring boot 获取商品

POST API 创建商品 URL : http://localhost:8080/products

apifox 请求spring boot 创建商品

PUT API 修改商品 URL : http://localhost:8080/products/3

apifox 请求 Spring Boot 修改商品

DELETE API 删除商品 URL : http://localhost:8080/products/3

apifox 请求 Spring Boot 删除商品

查看笔记

扫码一下
查看教程更方便