接口开发

概述

接口主要用于对柔性设计平台之后的程序做数据对接 如 移动端 PDA等

接口必须写个项目目录Web 包下 如 ent层 web包 下 DataBaseController

undefined

接口注解

接口 注解使用@Controller 或者@ResetController 写在类上方

支持 RequestMapping、GetMapping、PostMapping、ResponseBody等常见注解

@Controller

@Controller是 Spring MVC 中的一个核心注解,用于标记一个类作为 Web 请求控制器。它属于 Spring 的 @Component 派生产品,通常结合@RequestMapping、@GetMapping、@PostMapping 注解定义请求映射。

@Controller 标记 整个类 作为控制器,由 Spring IoC 容器自动管理 需配合 @RequestMapping 等注解,定义具体的请求方法映射 默认是 singleton(单例),可通过 @Scope修改(如 prototype)

示例代码

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

@Controller  // 声明为控制器
@RequestMapping("/user")  // 类级别路径映射
public class UserController {

    // GET请求:/user/profile?id=123
    @GetMapping("/profile")
    @ResponseBody  // 直接返回数据(非视图)
    public String getUserProfile(@RequestParam int id) {
        return "User ID: " + id;
    }
    //必要场景下参数名称和类型对应 
    //如果特殊场景 参数名称可以与Url上参数名称不对应 需写@RequestParam(value = "url参数名称")

    @GetMapping("/profile")
    @ResponseBody
    // URL: /profile?uid=123   → 方法参数接收为 `userId`
    public String getProfile(@RequestParam(value = "uid") String userId) {
        "UserID: " + userId; // 输出: UserID: 123
    }

    @GetMapping("/user/{uid}")
    @ResponseBody
    // URL: /user/456   → 方法参数接收为 `userId`
    public String getUser(@PathVariable("uid") String userId) {
        return "UserID: " + userId; // 输出: UserID: 456
    }

    // POST请求:/user/update
    @PostMapping("/update")
    public String updateUser(@RequestBody String body) {
        // 业务逻辑处理
        return "redirect:/success";  // 返回视图名
    }
}

@RestController

@RestController 是 Spring MVC 中用于构建 RESTful API 的核心注解,它集合了 @Controller和 @ResponseBody 的功能,专门用于返回数据(如 JSON/XML)

示例代码

import org.springframework.web.bind.annotation.*;

@RestController  // 关键注解
@RequestMapping("/api")
public class UserController {

    // GET 请求:/api/user/123
    @GetMapping("/user/{id}")
    public String getUser(@PathVariable Long id) {
        return "";
    }

    // POST 请求:/api/user
    @PostMapping("/user")
    public String createUser(@RequestBody String body) {
        // 保存用户逻辑...
        return "";
    }
}

[!NOTE]

@Controller 与@RestController 只需存在一个

一般场景下推荐使用 @RestController

@RequestMapping

一个注解,用于将 HTTP 请求映射到处理方法上。它可以用于类或方法上,以定义如何处理特定的请求。 提供了一种灵活的方式来处理 RESTful 风格的请求,并支持多种 HTTP 方法(如 GET、POST、PUT、DELETE 等)

    @RequestMapping("/users")
    public String getUsers() {
        return "userList";
    }

    @RequestMapping("/users",method = RequestMethod.GET)
    public String getUsers() {
        return "userList";
    }

    @RequestMapping("/users/{userId}")  // URL: /users/123
    public String getUser(@PathVariable String userId) {
        return "User ID: " + userId;
    }

@GetMapping

@RequestMapping(method = RequestMethod.GET)的简化形式,专门用于处理 GET 请求。它通常用于获取资源

    @GetMapping("/users")
    public String getUsers() {
        // 返回用户列表
    }

@PostMapping

@RequestMapping(method = RequestMethod.POST)的简化形式,专门用于处理 POST 请求。它通常用于创建新资源

    @PostMapping("/users")
    public User createUser(@RequestBody String body) {
        // 创建新用户
    }

[!NOTE]

@RequestMapping @PostMapping @GetMapping 只需存在一个 根据接口类型的不同 决定使用其中一个

@RequestBody

注解用于将请求体中的数据绑定到处理方法的参数上。它通常用于处理 POST 或 PUT 请求,以获取客户端发送的 JSON 或 XML 数据

    @PostMapping("/users")
    public User createUser(@RequestBody String body) {
        //参数将从请求体中解析而来
       JSONObject parseObject = JSON.parseObject("body");
    }

[!NOTE]

在POST 请求中接收 JSON/XML 数据(REST API 常见)或者是 接收纯文本 二进制数据时 需要@RequestBody

在接收表单数据时 不需要 @RequestBody 用@RequestParam去接收对应参数

@ResponseBody

注解用于指示控制器方法的返回值应该直接写入 HTTP 响应体,而不是被视为视图名。这在 RESTful API 中非常常见,用于返回 JSON、XML 等格式的数据

    @GetMapping("/users/{id}")
    @ResponseBody
    public User getUser(@PathVariable String id) {
        // 返回用户对象作为 JSON 响应
    }

[!NOTE]

如果使用 @Controller 在请求中 希望方法直接返回数据(如 JSON、纯文本),而非视图名称 则必须添加

如果使用 @RestController 则可省略

@PathVariable

注解用于将 URI 模板中的变量绑定到处理方法的参数上。它允许在 URL 中定义动态路径参数

    @GetMapping("/users/{id}")
    public User getUserById(@PathVariable String id) {
        // 根据路径变量 id 获取用户
    }

@Authorize

柔性开发平台 在web接口开发过程中 提供了@Authorize 用于处理非登录场景

匿名登录注解 @Authorize 可选配 匿名登录 不做处理 和 正常登录 可以不写 默认要求登录才能访问

@Authorize(policy = AuthorizePolicy.None) //不做处理 一般用于接口登录 接口能进但是涉及到需要登录的 场景则会报错
@Authorize(policy = AuthorizePolicy.Anonymous) //匿名登录 该接口内所有逻辑校验登录用户信息匿名访问
@Authorize(policy = AuthorizePolicy.Authenticated) //要求已经登录才能访问 默认为该注解

Swagger

接口支持Swagger注解 开发可以根据需求 考虑是否需要远程调用调试

以下参数 非接口必要参数 根据情况自行调整

@Api

@Api 注解用于标识一个类是 Swagger 的资源。通常,这个注解用在控制器类上,用于描述该控制器所提供的 API

@Api(value = "用户管理", tags = "用户相关的操作")
@RestController
@RequestMapping("/api/users")
public class UserController {
    // ...
}

@ApiOperation

@ApiOperation注解用于描述一个 API 方法的功能。它提供了方法的简要描述、可能的返回值以及 HTTP 操作的类型

@GetMapping("/{id}")
@ApiOperation(value = "根据ID获取用户", notes = "根据提供的用户ID返回用户信息")
public User getUserById(@PathVariable String id) {
    // ...
}

@ApiParam

@ApiParam 注解用于描述 API 方法参数的详细信息,包括参数的名称、类型、是否必需、默认值等

@GetMapping("/{id}")
@ApiOperation(value = "根据ID获取用户", notes = "根据提供的用户ID返回用户信息")
public User getUserById(@PathVariable String id) {
    // ...
}

@ApiResponse

@ApiResponse 注解用于描述 API 方法可能返回的响应信息,通常与 @ApiOperation一起使用。可以定义响应的 HTTP 状态码、描述和返回类型

@ApiOperation(value = "获取用户列表")
@ApiResponses(value = {
    @ApiResponse(code = 200, message = "成功获取用户列表"),
    @ApiResponse(code = 404, message = "用户未找到")
})
@GetMapping
public List<User> getAllUsers() {
    // ...
}

登录

柔性设计平台接口需要访问数据库信息或者是用户信息时 要求 存在登录信息

下面介绍接口实现登录的方法 具体使用LoginHelper 类

LoginHelper 登录类

  • login(userId, password, clientInfo, dataArea):登录 参数分别为 用户编号 密码 客户端信息(一般为null) 账套

        @GetMapping("/login")
        public String loginByUser(String userId,String password) {
            UserSession userSession = LoginHelper.login(userId, password, null, "dynamic");
            if(userSession ==null  || UserSession.current() ==null) {
                return ResultUtil.errorResult("用户名密码错误 登录失败");
            }
            return ResultUtil.successResult(UserSession.current().getUserSessionId());
        }
    
  • LoginHelper.loginByCode(code, userIdFunction) :根据code 登录 在 function 根据传入的code 找到对应的 userId 返回 则可登录该用户

        @GetMapping("/loginByCode")
        public String loginByCode(String code) {
            LoginHelper.loginByCode(code, new Function<String, String>() {
                @Override
                public String apply(String code) {
                    SysUser sysUser = DAOHelper.findRecord(SysUser.class, SysUser._Weixin,code);
                    if(sysUser !=null) {
                        return sysUser.getUserId();
                    }
                    return null;
                }
            });
            if( UserSession.current() ==null) {
                return ResultUtil.errorResult("Code验证异常 登录失败");
            }
            return ResultUtil.successResult(UserSession.current().getUserSessionId());
        }
    
  • LoginHelper.loginByToken(token, clientInfo, dataArea):根据token登录

      @GetMapping("/loginByToken")
      public String loginByToken(String token) {
          LoginHelper.loginByToken(token, null, "dynamic");
          if( UserSession.current() ==null) {
              return ResultUtil.errorResult("Code验证异常 登录失败");
          }
          return ResultUtil.successResult(UserSession.current().getUserSessionId());
      }
    

请求地址

根据环境不同 请求路径存在差异

域环境

开发环境根据接口位置不同 路径不同

OS环境

os环境 比 域环境多了一层 如果是web请求 则在域 接口路径前 把ip 端口换成 osIP端口 且在web前面拼上 域Id

如 请求一个 Item 物料域的 gongqi.eqm.ims 应用的 接口

http://os-kf.gongqi.info/Item/web/apps/gongqi.eqm.ims/configuration/getFileDraw

results matching ""

    No results matching ""