Spring boot 没有为参数传递值
我用kotli。我根据需求定义一切,为什么我会 事物类型问题 我在UserRegistration类中遇到了这种类型的问题没有传递值 用于参数部门和用户注册 我创建了ResponseTemplateVOPOJO类 ResponseVO.kt 包com.userservice.userregistration.VOSpring boot 没有为参数传递值,spring-boot,kotlin,Spring Boot,Kotlin,我用kotli。我根据需求定义一切,为什么我会 事物类型问题 我在UserRegistration类中遇到了这种类型的问题没有传递值 用于参数部门和用户注册 我创建了ResponseTemplateVOPOJO类 ResponseVO.kt 包com.userservice.userregistration.VO import com.userservice.userregistration.entity.UserRegistration data class ResponseTemplate
import com.userservice.userregistration.entity.UserRegistration
data class ResponseTemplateVO(
var userRegistration: UserRegistration,
var department: Department
)
科室
UserRegistration.kt
UserRegistrationService.kt
我在下面第2行的方法中遇到错误
没有为参数department和userRegistration传递值。这是
错误
本声明:
数据类ResponseTemplateVO(
var userRegistration:userRegistration,
var部门:部门
)
包装多种物品:
- 它声明了两个属性
和userRegistration
department
- 它用两个参数定义类的主构造函数:
和userRegistration
department
val vo=ResponseTemplateVO()
您正在调用该类的构造函数,但未指定2个必需参数。您应该通过传递参数来调用它:
fun getUserWithDepartment(userId:Long):ResponseTemplateVO{
val userRegistration:userRegistration=userRegistrationRepository.findUserById(userId)
val部门:部门?=restTemplate.getForObject(“http://localhost:9001/departments/“+userRegistration.departmentId,
Department::class.java)
如果(部门==null){
//在这里,您应该决定它是否应该有一个默认值
//或者抛出异常
}
返回响应模板VO(用户注册,部门)
}
请注意,您将部门
属性声明为非空,因此需要非空部门才能创建类的实例。
因此,如果部门
为空,则有3个选项:
ResponseTemplateVO
中部门的类型,使其接受空值(部门?
带?
)
此外,如果您使用所有必需的值实例化类,并且以后不需要修改其属性,则可以声明属性
val
。这通常是更惯用的科特林。使用不变性,更容易对值进行推理。问题在于数据类
data class ResponseTemplateVO(
var userRegistration: UserRegistration,
var department: Department
)
在这里,您已将以下参数添加到数据类的构造函数中。因此,在初始化类之前,需要将值传递给类的构造函数
因此,您的ResponseTemplateVO数据类将变成这样
data class ResponseTemplateVO(
var userRegistration: UserRegistration?=null,
var department: Department?=null)
现在,因为我们已经将null指定为默认值。现在您可以初始化数据类,它创建的数据类的值设置为null,您不需要将参数的任何值传递给构造函数。现在,您可以访问每个变量,并将各自的数据设置到其中。这确实不是我首先建议的方法。应该尽可能避免使事物为空。特别是,在这种情况下,
userRegistration
不必为空。通常使用val
也比使用var更可取,因为它允许智能强制转换等,因此这也有利于直接使用args调用构造函数,而不是创建空对象并在以后填充。嘿,感谢您提供的信息。
package com.userservice.userregistration.entity
data class UserRegistration(
val userId:Long=-1,
val firstName:String="",
val lastName:String="",
val email:String="",
val departmentId:Long=-1,
)
package com.userservice.userregistration.service
import com.userservice.userregistration.VO.Department
import com.userservice.userregistration.VO.ResponseTemplateVO
import com.userservice.userregistration.entity.UserRegistration
import com.userservice.userregistration.repository.UserRegistrationRepository
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Service
import org.springframework.web.client.RestTemplate
@Service
class UserRegistrationService {
@Autowired
private lateinit var userRegistrationRepository: UserRegistrationRepository
@Autowired
private lateinit var restTemplate: RestTemplate
fun saveUserDetails(userRegistration: UserRegistration): UserRegistration {
return userRegistrationRepository.save(userRegistration)
}
fun getUserWithDepartment(userId: Long): ResponseTemplateVO {
val vo= ResponseTemplateVO()
val userRegistration:UserRegistration=userRegistrationRepository.findUserById(userId)
val department: Department? =
restTemplate.getForObject("http://localhost:9001/departments/"+userRegistration.departmentId,
Department::class.java)
vo.userRegistration=userRegistration
if (department != null) {
vo.department=department
}
return vo
}
}
val vo= ResponseTemplateVO()
fun getUserWithDepartment(userId: Long): ResponseTemplateVO {
val vo= ResponseTemplateVO()
val userRegistration:UserRegistration=userRegistrationRepository.findUserById(userId)
val department: Department? =
restTemplate.getForObject("http://localhost:9001/departments/"+userRegistration.departmentId,
Department::class.java)
vo.userRegistration=userRegistration
if (department != null) {
vo.department=department
}
return vo
}
data class ResponseTemplateVO(
var userRegistration: UserRegistration,
var department: Department
)
data class ResponseTemplateVO(
var userRegistration: UserRegistration?=null,
var department: Department?=null)