Spring引导和Kotlin-如何验证JSON对象
我在科特林用的是弹簧靴 我正在接收一些JSON字符串,用ObjectMapper对其进行解析,但是我想验证它是否具有与模型中相同的所有内容,即Spring引导和Kotlin-如何验证JSON对象,spring,spring-boot,kotlin,Spring,Spring Boot,Kotlin,我在科特林用的是弹簧靴 我正在接收一些JSON字符串,用ObjectMapper对其进行解析,但是我想验证它是否具有与模型中相同的所有内容,即id和s3FilePath不是空的或缺失的 这就是我要验证的模型: @JsonIgnoreProperties(ignoreUnknown = true) class MyModel { var id : String = "" var s3FilePath : String = "" } 这就是我使用该模型的地方: class Firs
id
和s3FilePath
不是空的或缺失的
这就是我要验证的模型:
@JsonIgnoreProperties(ignoreUnknown = true)
class MyModel {
var id : String = ""
var s3FilePath : String = ""
}
这就是我使用该模型的地方:
class FirstMessage {
fun create(newMessage: String) : String {
val objectMapper = ObjectMapper()
val parsedMap : MyModel = objectMapper.readValue(newMessage, MyModel::class.java)
val result = MyModel()
result.id = parsedMap.id
result.s3FilePath = parsedMap.s3FilePath
return objectMapper.writeValueAsString(result)
}
}
最后,我有一个测试,我想验证一个异常:
@Test
fun incompleteDataReturnsException() {
var input = """{"missing": "parts"}"""
// FirstMessage().create(input) // Will make some assertion here here
}
任何帮助都将不胜感激。我刚开始使用Spring,它非常“强烈”
谢谢
p、 如果创建模型错误/有更好的方法,请让我知道。我有点不确定这是不是正确的方法。如果我理解您的问题是正确的,您只需要检查您所需的属性是否已设置。因此,我建议在使用以下内容解析字符串后检查该属性:
class FirstMessage {
fun create(newMessage: String) : String {
val objectMapper = ObjectMapper()
// validation 1: your input is valid JSON
val parsedMap : MyModel = objectMapper.readValue(newMessage, MyModel::class.java)
// validation 2: check that your properties are set
if(parsedMap.id.isNullOrEmpty() ||
parsedMap.s3FilePath.isNullOrEmpty())
{
throw IllegalArgumentException("Invalid input")
}
val result = MyModel()
result.id = parsedMap.id
result.s3FilePath = parsedMap.s3FilePath
return objectMapper.writeValueAsString(result)
}
}
视范围而定,,更好的解决方案是在目标类的属性上设置一个新的注释,如
@NotEmpty
,该注释是必需的,并且具有一个通用的解析器函数,用于验证解析对象上的所有带注释的字段,并抛出一个更好的异常,该异常准确地说明缺少哪些字段。您应该使用数据类对于模型。另外,请使用kotlin JacksonObject Mapper()而不是ObjectMapper()。标准ObjectMapper在Kotlin中不起作用。或者从Spring上下文注入ObjectMapper。在依赖项中添加“com.fasterxml.jackson.module:jackson module kotlin”
@JsonIgnoreProperties(ignoreUnknown = true)
data class MyModel (
val id : String,
val s3FilePath : String
)
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import com.fasterxml.jackson.module.kotlin.readValue
class FirstMessage {
fun create(newMessage: String) : String {
val parsedMap : MyModel = jacksonObjectMapper().readValue(newMessage)
return jacksonObjectMapper().writeValueAsString(parsedMap)
}
}
class FirstMessageTest {
@Test
fun incompleteDataReturnsException() {
val input = """{"missing": "parts"}"""
assertThrows (MissingKotlinParameterException::class.java
{FirstMessage().create(input)} // Will make some assertion here here
}
@Test
fun `Should parse`() {
val input = """{"id":"id",
"missing": "parts",
"s3FilePath":"somePath"}"""
FirstMessage().create(input) // Will make some assertion here here
}
}
谢谢-我如何根据空字符串进行验证?例如,如果错误是
s3FilePath
是”
?在Spring应用程序中,您可以简单地为字段@NotEmpty添加注释,并在服务中为类上的#@Validated和方法中的#@Validated添加注释,例如,fun save(#@validate myclass:myclass)。但是对于你的测试,我认为这会很有帮助