Logo

郎哥编程

编写登录接口

2022-03-28 327

系统内置系统管理员登录接口,登录用户名为“admin”,登录密码为“123456”。

前端调用登录接口完成系统管理员登录系统操作,若登录成功,系统进入图书管理页面,若登录失败,系统给出登录失败信息。

1、 接口返回类

接口需要返回数据给前端,在编写接口之前,先定义一个接口返回类,存储接口返回的数据和接口的调用信息。

在项目util包下建立ResultInfo类,用于存储接口的返回信息。

程序清单7.1 ResultInfo.java

package com.milihua.ebook.util;
public class ResultInfo {
    /**
     *@Description: 调用结果 0:成功 1:失败
     *@date: 2021/10/11
     */
    public String code;
    /**
     *@Description: 消息描述
     *@date: 2021/10/11
     */
    public String message;
    /**
     *@Description: 返回的实例类
     *@date: 2021/10/12
     */
    public Object object;
    public ResultInfo()
    {
        code = "1";
        message = "";
        object = null;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
    public Object getObject() {
        return object;
    }
    public void setObject(Object object) {
        this.object = object;
    }
 
}

类有三个属性code、message、object,code表示客户端请求是否处理成功,若值为0,表示客户端请求处理成功,否则处理失败;message为通知客户端的请求处理消息;object存储返回客户端的数据对象,若无数据对象返回,可为null值。

2、实现登录业务

在项目service包下,新建LoginService接口,编写接口方法。

程序清单7.2 LoginService.java

public interface LoginService {
    // 系统管理员登录接口
    public ResultInfo login(String name,String psw);
}

LoginService接口类定义了接口login,该接口的实现类为LoginServiceImpl.java。在service包下建立impl包,在impl包下建立LoginServiceImpl类,实现LoginService接口。

程序清单7.3 LoginServiceImpl.java

@Service
public class LoginServiceImpl implements LoginService {
    // 用户mapper
    @Resource
    MuserMapper  muserMapper;
 
    @Override
    public ResultInfo login(String name, String psw) {
        /**
        *@Description: 实现登录业务接口
        *@Param: [name, psw]
        */
        ResultInfo resultInfo = new ResultInfo();
        MuserExample muserExample = new MuserExample();
        MuserExample.Criteria criteria = muserExample.createCriteria();
        criteria.andLoginNameEqualTo(name);
        criteria.andPswEqualTo(psw);
        List<Muser> list =  muserMapper.selectByExample(muserExample);
        if(list.size() > 0) {
            resultInfo.setCode("1");
            resultInfo.setMessage("没有该用户,用户名或密码错误");
            return resultInfo;
        }
        resultInfo.setCode("0");
        resultInfo.setMessage("用户登录成功");
        resultInfo.setObject(list.get(0));
        return resultInfo;
 
    }
}

在LoginServiceImpl类前面要添加注解@Service,Spring会自动扫描被@Service注解的包,并添加到Spring容器。接口使用@Resource注入MuserMapper实例,执行数据库的查询操作。

login方法实例化ResultInfo对象,使用MuserExample查询对象设置查询条件,查询用户表,并将查询结果写入ResultInfo对象。

3、 登录控制器类

控制器类(Controller)负责控制所有客户端与服务器端的交互,它接受客户端的请求,并调用业务逻辑类对请求进行处理,将处理后的数据返回给客户端。

在项目controller包下,建立LoginController类,编写处理客户端登录请求的方法。

程序清单7.4 LoginController.java

@Controller
@Api(tags = "用户接口")
@RequestMapping("Login")
public class LoginController {
    @Resource
    private LoginService loginService;
 
    //用户登录
    @ApiOperation("用户登录")
    @RequestMapping(value = "/tolongin.do", method = {RequestMethod.POST})
    public String toLongin(@RequestBody loginfo login, HttpServletRequest request, HttpServletResponse response) {
        Map<String, Object> map = new HashMap<String, Object>();
        ResultInfo resultInfo = loginService.login(login.getName(),login.getPsw());
        map.put("handleResult",resultInfo.getCode());
        map.put("errMessage", resultInfo.getMessage());
        return getString(response, map);
    }
 
    private String getString(HttpServletResponse response, Map<String, Object> map) {
        String jsonOutput = JSON.toJSONString(map);
        try {
            BufferedWriter out = null;
            out = new BufferedWriter(new OutputStreamWriter(response.getOutputStream(), "UTF-8"));
            out.write(jsonOutput);
            out.flush();
 
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
 
}

在LoginController类前面添加@Controller注解,通知Spring该类是控制器类(SpringMVC Controller对象),Spring会将该类添加到Spring容器,并将符合条件的客户端请求交给该类进行处理并返回客户端处理结果。

@RequestMapping("Login")注解用于处理客户端请求地址的映射,该注解可以添加在类或类方法上。添加到类时,需要把该注解添加到类的头部,@Controller注解的后面,表示该类中所有响应请求的方法都是以该地址作为父路径。 添加到类方法时,需要把该注解添加到方法的首部,表示一个处理响应请求的地址。

LoginController类的toLongin方法用于处理客户端的用户登录请求。客户端要调用toLongin方法,需要知道toLongin方法的请求地址,该请求地址由@RequestMapping注解定义:

    @RequestMapping(value = "/tolongin.do", method = {RequestMethod.POST})

@RequestMapping注解添加在toLongin方法的首部,其中,value参数给出该方法的请求地址,该请求地址需要和在类头部由@RequestMapping注解定义的地址合并为一个完整的请求地址,例如:"/Login/ toLongin.do",method参数给出请求类型。

toLongin方法的传入参数类型为HttpServletRequest,toLongin方法应用HttpServletRequest可以获取客户端请求的所有信息,也包括客户端提交的表单信息。toLongin方法调用LoginService类的login方法判断客户端传入的用户名和登录密码是否正确,login方法会返回ResultInfo实例对象,该实例对象记录了登录是否成功的信息,最后toLongin方法调用getString方法返回JSON数据给客户端。

@Api注解是Swagger注解,该注解用于Controller类,表示对类的说明。该注解有两个参数:value、tags。

tags:说明该类的作用,可以在UI界面上看到

value: 说明该类作用,但在UI界面上看不到

@ApiOperation注解是Swagger注解,该注解用来对某个方法/接口进行描述,注解需要传入一个参数value,对接口进行简单的描述。

4、 运行接口服务

接口编写完成后,需要对接口进行调试。调试过程如下:

(1)构建项目

选择【Build】菜单下的【Build Project】命令或按下Ctrl+F9快捷键,IDEA开始构建项目,若编写的代码有错误或环境配置错误,IDEA会在Build窗口列出错误信息,开发者可根据错误信息进行定位并改正问题。

(2)运行项目

选择【Run】菜单下的【Run ‘EbookApplication’】命令,或者按下Shift+F10快捷键启动服务。IDEA会在Run窗口列出启动信息,若启动失败,需要根据启动失败信息排查问题。

(3)打开Swagger服务

启动浏览器,在浏览器地址栏输入Swagger服务地址:

http://localhost:8089/swagger-ui.html

浏览器窗口会打开Swagger服务页面,如图7-1所示。

08.png

图 7-1 Swagger服务页面

(4)接口调试

在Swagger服务页面选择用户接口项,进入用户接口页面,展开用户登录接口,如图7-2所示。

09.png

图 7-2 用户登录接口调试区域

 

单击【Try it out】按钮,在login接口输入请求参数区域填写正确的参数,如图7-3所示。

10.png

图 7-3 填写接口请求参数

请求参数填写完成,单击【Execute】链接,调用接口,接口无论执行成功或失败,Swagger都会返回接口执行结果。如图7-4所示。

11.png

图 7-4 接口返回结果


代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论