我在我的 REST API 中有一个用于登录用户的模型,对应于用户表(电子邮件和密码作为表列)
@Entity
public class User {
@Id
@GeneratedValues
private Long id;
private String email;
private String password;
+GET , +SET
}
然后是@Controller,它正在使用 JPAService 调用上述用户实体
@Controller
@RequestMapping("/rest/auths")
public class AuthController {
@Autowired
private UserService authService;
@RequestMapping(value = "/login", method = RequestMethod.POST)
public @ResponseBody ResponseEntity<AuthLoginFormResource> login(@RequestBody AuthLoginFormResource sentAuth) {
User user = authService.login(sentAuth.toUser());
AuthLoginFormResource res = new AuthLoginFormResourceAsm().toResource(user);
HttpHeaders headers = new HttpHeaders();
headers.setLocation(URI.create(res.getLink("self").getHref()));
return new ResponseEntity<AuthLoginFormResource>(res, HttpStatus.OK);
}
}
AuthLoginFormResource:-
public class AuthLoginFormResource extends ResourceSupport {
private String email;
private String password;
private boolean success;
public User toUser() {
User user = new User();
user.setEmail(email);
user.setPassword(password);
//user.setSuccess(false);
return user;
}
+GET, +SET
}
AuthLoginFormResourceAsm:-
public class AuthLoginFormResourceAsm extends ResourceAssemblerSupport<User, AuthLoginFormResource> {
public AuthLoginFormResourceAsm() {
super(User.class, AuthLoginFormResource.class);
}
@Override
public AuthLoginFormResource toResource(User user) {
AuthLoginFormResource res = new AuthLoginFormResource();
res.setEmail(user.getEmail());
res.setPassword(user.getPassword());
//res.setSuccess(user.isSuccess()); // Success is not existing in USER
res.add(linkTo(AuthController.class).withSelfRel());
return res;
}
}
有2个问题-
我需要发送一个成功标志作为布尔值作为响应,为此我已将布尔值成功添加到 AuthLoginFormResource。但是,AuthLoginFormResource 仅从 AuthLoginFormResourceAsm.toResource 方法中设置,而后者又从实体用户中进行设置。由于没有成功列的用户实体模型数据库,我无法在这个地方设置成功。
那么,我应该向用户实体添加虚拟成功字段并从服务方法中设置它,尽管数据库中没有这样的字段还是在这里创建一个代表登录表单的新实体并返回它?
另一个字段存在同样的问题,该字段是用于身份验证的令牌,该令牌在数据库中不存在,但属于响应的一部分。
在 ResourceSupport 对象中设置此类字段的正确位置是什么 - 在数据库实体内部并从服务返回/在域模型之上创建另一个表单模型实体并从服务返回。
这是我在许多数据模型和表单不一对一匹配的地方面临的基本问题。