java - 如何将 bean 注入 POJO?
问题描述
PasswordEncoder
我的目标是注入CreateUserModel
POJO。
我把它@Bean PasswordEncoder passwordEncoder
放在一个配置类中。
@Configuration
public class Config {
@Bean
PasswordEncoder getPasswordEncoder() {
return new BCryptPasswordEncoder(10);
}
}
这就是我希望我的 POJO 的样子:
public class CreateUserModel {
private String username;
private String password;
private String name;
private String role;
private final PasswordEncoder passwordEncoder;
public CreateUserModel(PasswordEncoder passwordEncoder, String username, String password, String name, String role) {
this.passwordEncoder = passwordEncoder;
this.username = username;
this.password = passwordEncoder.encode(password);
this.name = name;
this.role = role;
}
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
public String getName() {
return name;
}
public String getRole() {
return role;
}
}
这就是我使用CreateUserModel
POJO 的方式。
@RestController
public class OrganizationController {
@PostMapping("/organization/createuser")
public CreateUserModel createUser(@RequestBody CreateUserModel user) {
return user;
}
}
用户将发送一个带有正文的 POST 请求:
{
"username": "user",
"passsword": "secret",
"name": "user client",
"role": "1"
}
我发送 POST 请求的预期结果/organization/createuser
是:
{
"username": "user",
"passsword": "alv4ko023j4v2lkralfj",
"name": "user client",
"role": "1"
}
我的实际结果,服务器抛出
2021-02-20 21:32:26.614 WARN 202592 --- [nio-8080-exec-3] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot construct instance of `com.example.satpamspringboot.model.organization.CreateUserModel`, problem: `java.lang.NullPointerException`; nested exception is com.fasterxml.jackson.databind.exc.ValueInstantiationException: Cannot construct instance of `com.example.satpamspringboot.model.organization.CreateUserModel`, problem: `java.lang.NullPointerException`
at [Source: (PushbackInputStream); line: 6, column: 1]]
我能想到的唯一解决方案是使用 DTO 模式,它需要 5 个单独的文件:
- 带有@RestController、@PostMapping、@RequestBody 的文件
- DTO 对象的文件。
- 带有@Service 的文件
- 带有@Mapper 的文件
- DAO 对象的文件。
PasswordEncoder
通过注入CreateUserModel
POJO,它将减少样板:
- 结合 DTO 和 DAO 对象。
- 使用@Service 删除文件。
解决方案
推荐阅读
- django - 来自 S3 的图像 url 在 Django 模板中不起作用
- android - 基于所需订购的自定义组件排序
- apache-spark - 如何将 spark mllib 与结构化流结合使用?
- markdown - 在降价中隐藏带有单选按钮的部分
- image - 如何在鼠标悬停 QML 上突出显示图像
- ionic-framework - 如何将离子模态高度设置为等于其内容
- maven - Maven 使用配置文件部署
- java - 如何在android的MainActivity.java文件中添加代码
- python - python celery AttributeError: 'int' object has no attribute 'upper' 错误
- linux - 找不到与inferior的线程库匹配的libthread_db,线程调试将无法使用