ResponseEntity主体属性在Springboot和Kotlin中丢失



我正在开发一个spring引导服务器,我正在尝试实现一个自定义的验证异常处理程序

data class UserDtoIn(
@field:NotBlank(message = "Please add a username")
var username: String = "",
@field:NotBlank(message = "Please add your password")
var password: String = "",
@field:Email(message = "Please add a correct email")
var email: String = ""
)
@JsonInclude(JsonInclude.Include.NON_NULL)
class ErrorResponse(
val status: Int = 0,
val message: String? = null,
var stackTrace: String? = null,
var errors: MutableList<ValidationError>? = null,
) {
class ValidationError(
private val field: String? = null,
private val message: String? = null
)
fun addValidationError(field: String?, message: String?) {
if (Objects.isNull(errors)) {
errors = ArrayList()
}
errors!!.add(ValidationError(field, message))
}
}
@ResponseStatus(HttpStatus.UNPROCESSABLE_ENTITY)
override fun handleMethodArgumentNotValid(
ex: MethodArgumentNotValidException,
headers: HttpHeaders,
status: HttpStatusCode,
request: WebRequest
): ResponseEntity<Any>? {
val errorResponse = ErrorResponse(
HttpStatus.UNPROCESSABLE_ENTITY.value(),
"Validation error. Check 'errors' field for details."
)
for (fieldError in ex.bindingResult.fieldErrors) {
errorResponse.addValidationError(fieldError.field, fieldError.defaultMessage)
}
return ResponseEntity.unprocessableEntity().body(errorResponse)
}

对于一个错误的请求,我得到的响应是:

{
"status": 422,
"message": "Validation error. Check 'errors' field for details.",
"errors": [
{},
{}
]
}

的意见吗?错误响应消息正确显示,但是error对象似乎为空,但是为它们创建了条目。(在inDto我有2个坏字段,我有两个括号中的错误)

在调试模式下,我的errorResponse看起来像这样

您在ValidationError类中的两个字段是private,基本上对于private字段,按照java风格jackson使用getterssetters进行序列化和反序列化。

因为它是kotlin编程,它们是用val关键字定义的,你可以将它们定义为public,你不需要分配null,因为默认情况下它是String类型的默认值。

class ValidationError(
val field: String?,
val message: String?
)