根据接口文档完成接口:
接口文档:
1.1 注册
1.1.1 基本信息
请求路径:/user/register
请求方式:POST
接口描述:该接口用于注册新用户
1.1.2 请求参数
请求参数格式:x-www-form-urlencoded
请求参数说明:
参数名称 | 说明 | 类型 | 是否必须 | 备注 |
---|---|---|---|---|
username | 用户名 | string | 是 | 5~16位非空字符 |
password | 密码 | string | 是 | 5~16位非空字符 |
请求数据样例:
username=zhangsan&password=123456
1.1.3 响应数据
响应数据类型:application/json
响应参数说明:
名称 | 类型 | 是否必须 | 默认值 | 备注 | 其他信息 |
---|---|---|---|---|---|
code | number | 必须 | 响应码, 0-成功,1-失败 | ||
message | string | 非必须 | 提示信息 | ||
data | object | 非必须 | 返回的数据 |
响应数据样例:
{ "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;
}