9.5总结

根据接口文档完成接口:

接口文档:

1.1 注册

1.1.1 基本信息

请求路径:/user/register

请求方式:POST

接口描述:该接口用于注册新用户

1.1.2 请求参数

请求参数格式:x-www-form-urlencoded

请求参数说明:

参数名称说明类型是否必须备注
username用户名string5~16位非空字符
password密码string5~16位非空字符

请求数据样例:

username=zhangsan&password=123456

1.1.3 响应数据

响应数据类型:application/json

响应参数说明:

名称类型是否必须默认值备注其他信息
codenumber必须响应码, 0-成功,1-失败
messagestring非必须提示信息
dataobject非必须返回的数据

响应数据样例:

{
    "code": 0,
    "message": "操作成功",
    "data": null
}

首先完成基本三大类的编写(controller,service,mapper)

controller:

@Slf4j//记录日志
@Validated//全局异常处理
@RestController
@RequestMapping("/user")
public class RegisterController {

    @Autowired
    private RegisterService registerService;

    @PostMapping("/register")
    public Result register(@Pattern(regexp = "^\\S{5,16}$") String username,@Pattern(regexp = "^\\S{5,16}$") String password){
            log.info("注册前查询:");
            User u=registerService.findByUserName(username);
            if(u==null){
                //没有占用
                log.info("注册:",username,password);
                registerService.register(username,password);
                return Result.success();
            }
            else{
                //占用
                return Result.error("用户名已被占用");
            }
    }
}

service:

public interface RegisterService {
    //注册
    void register(String username, String password);

    User findByUserName(String username);
}
@Service
public class RegisterServiceImpl implements RegisterService {

    @Autowired
    private RegisterMapper registerMapper;
    @Override
    public void register(String username, String password) {
        String PasswordMd5= Md5Util.getMD5String(password);
        registerMapper.register(username,PasswordMd5);
    }

    @Override
    public User findByUserName(String username) {
        User u=registerMapper.findByUserName(username);
        return u;
    }
}

mapper:

@Mapper
public interface RegisterMapper {
    @Insert("insert into user(username, password, create_time, update_time) values (#{username},#{password},now(),now())")
    public void register(@Param("username")String username,@Param("password")String password);

    @Select("select * from user where username=#{username}")
    public User findByUserName(@Param("username") String username);
}

我们还需根据实际需求添加正则表达式(用户名和密码不能为空,否则无法正常注册)

为了能够正常处理全局异常和返回接口文档所需参数的格式,还需要一个处理全局异常的类:
 

//全局异常处理器
@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    public Result handleException(Exception e){
        e.printStackTrace();
        return Result.error(StringUtils.hasLength(e.getMessage())?e.getMessage():"操作失败");
    }
}

配置文件(xml文件):

<!--
        全局异常处理器

-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
            <version>3.3.1</version>
        </dependency>

满足接口文档的相应格式(对于的类):

@Data//getter和setter方法
@NoArgsConstructor
@AllArgsConstructor
public class Result<T> {
    private Integer code;//业务状态码  0-成功  1-失败
    private String message;//提示信息
    private T data;//响应数据

    //快速返回操作成功响应结果(带响应数据)
    public static <E> Result<E> success(E data) {
        return new Result<>(0, "操作成功", data);
    }

    //快速返回操作成功响应结果
    public static Result success() {
        return new Result(0, "操作成功", null);
    }

    public static Result error(String message) {
        return new Result(1, message, null);
    }
}

P2370 yyy2015c01 的 U 盘 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

一道非常普通的背包问题,马上选拔赛了,练练手

#define _CRT_SECURE_NO_WARNINGS 1
//------ 棘手大学 世界第一 ------//
//------ 吉大出品 必出精品 ------//
#include<bits/stdc++.h>
#include<unordered_map>
#include<unordered_set>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<queue>
#include<map>
#include<cmath>
using namespace std;
typedef long long ll;
#define IOS ios::sync_with_stdio(false); cin.tie(nullptr), cout.tie(nullptr);
const int N = 2e6 + 10;
struct node
{
	int w;
	int v;
}ss[N];
ll dp[N];
bool cmp(node a, node b)
{
	return a.w < b.w;
}
void solve()
{
	ll n, p, s;
	cin >> n >> p >> s;
	for (int i = 1; i <= n; i++)
	{
		cin >> ss[i].w >> ss[i].v;
	}
	sort(ss + 1, ss + 1 + n, cmp);
	for (int i = 1; i <= n; i++)
	{
		for (int j = s; j >= ss[i].w; j--)
		{
			dp[j] = max(dp[j], dp[j - ss[i].w] + ss[i].v);
			if (dp[j] >= p)
			{
				cout << ss[i].w << "\n";
				return;
			}
		}
	}
	cout << "No Solution!" << "\n";
	return;
}
int main()
{
	IOS;
	solve();
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值