在之前写的代码值,我接收前端的json对象和响应给前端的json对象都是java实体类,这样虽然简单,但随着接口的数量越来越多,我也发现了一些问题,比如在登录注册时,usename和password是必须要校验的,这个时候我们在Java用户表实体类添加非空校验,但有一些字段使用前端也是传递json数据,就比如修改用户资料(包括:昵称,生日,性别)等等,这些是不需要传username和password的,但如果我们还是用user表实体类接收时username和password又要必须传,这样就前后矛盾了
然后就是返回给前端的数据,当我们要查文章详细信息的时候,我们是希望连用户表然后把这篇文章的作者的一些信息查出来返回给前端的,但是查询文章list集合的时候我们不希望展示用户相关的信息,这个时候我们如果还是只用文章表接收数据和返回数据,那么就会有特别多的数据不需要的数据,但是还是返回给了前端
查询文章list集合时就会有很多多余的字段还是被返回了
vo接受json数据类,之前用user类接受时有的接口需要校验有的接口接口不需要校验不灵活,使用vo新建一个类来接收,然后用beanUtil来vo类转实体类
之前的:
/**
* 注册
*/
@PostMapping("/sign")
public Result <String> list(@RequestBody User user){
QueryWrapper queryWrapper = QueryWrapper.create();
queryWrapper.where(USER.USERNAME.eq(user.getPassword()));
//判断用户名是否被注册
User user1=userService.getOne(queryWrapper);
if(user1!=null){
return Result.fail("用户名已注册");
}
//密码加密
String endPwd= LoginHelper.enPwd(user.getPassword());
user.setPassword(endPwd);
//类型转换
// User user=new User();
// BeanUtil.copyProperties(userNameVo,user);
userService.save(user);
return Result.ok("注册成功");
}
直接传的是user类,
改了之后,新建一个类
package com.tdin360.boot.blog.entity.vo;
import lombok.Data;
import org.springframework.lang.NonNull;
@Data
public class UserNameVo {
/**
账号
*/
@NonNull
private String username;
/**
密码
*/
@NonNull
private String password;
}
/**
* 注册
*/
@PostMapping("/sign")
public Result <String> list(@RequestBody UserNameVo userNameVo){
QueryWrapper queryWrapper = QueryWrapper.create();
queryWrapper.where(USER.USERNAME.eq(userNameVo.getPassword()));
//判断用户名是否被注册
User user1=userService.getOne(queryWrapper);
if(user1!=null){
return Result.fail("用户名已注册");
}
//密码加密
String endPwd= LoginHelper.enPwd(userNameVo.getPassword());
userNameVo.setPassword(endPwd);
//类型转换
User user=new User();
BeanUtil.copyProperties(userNameVo,user);
userService.save(user);
return Result.ok("注册成功");
}
自定义返回类,如上图所示,我们想要的结果是返回文章列表时不返回用户相关的信息,但返回文章详细信息时返回用户的详细信息
这个时候我们可以定义一个返回类
package com.tdin360.boot.blog.entity.dto;
import com.tdin360.boot.common.mybatisflex.entity.BaseEntity;
import lombok.Data;
@Data
public class BlogListDto extends BaseEntity {
/**
* 博客标题
*/
private String blogTitle;
/**
* 博客封面
*/
private String blogCover;
/**
* 博客内容
*/
private String blogContent;
/**
* 浏览量
*/
private Integer blogLook;
}
这个类相比于Blog少了用户相关的东西
package com.tdin360.boot.blog.entity;
import com.mybatisflex.annotation.Column;
import com.mybatisflex.annotation.Table;
import com.tdin360.boot.common.mybatisflex.entity.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
/**
* blog 实体类
* @author by yyyyyhw
* @date 2024-07-30
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Table("blog")
public class Blog extends BaseEntity {
// /**
// id
// */
// private Long id;
/**
博客标题
*/
private String blogTitle;
/**
博客封面
*/
private String blogCover;
/**
博客内容
*/
private String blogContent;
/**
浏览量
*/
private Integer blogLook;
@Column(ignore = true)
private String tagName;
/**
用户id
*/
private Long UserId;
/**
标签ID集合
*/
@Column(ignore = true)
private List<String> tagList;
/**
用户昵称
*/
@Column(ignore = true)
private String nick;
/**
用户头像
*/
@Column(ignore = true)
private String url;
}
Page<Blog> page = blogService.page(page1,queryWrapper);
List<Blog> blogs =page.getRecords();
List<BlogListDto> blogListDtoList=new ArrayList<>();
//list集合转换
for (Blog blog:blogs){
BlogListDto blogListDto=new BlogListDto();
BeanUtil.copyProperties(blog,blogListDto);;
blogListDtoList.add(blogListDto);
}
return Result.ok(blogListDtoList,page.getTotalRow());
查询到的list集合类型是Blog,但我们想返回的是类型为BlogListDto的对象,这个时候可以对其进行转换
现在这个返回值类型就少了很多