Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring引导和Kotlin-如何验证JSON对象_Spring_Spring Boot_Kotlin - Fatal编程技术网

Spring引导和Kotlin-如何验证JSON对象

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

我在科特林用的是弹簧靴

我正在接收一些JSON字符串,用ObjectMapper对其进行解析,但是我想验证它是否具有与模型中相同的所有内容,即
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)。但是对于你的测试,我认为这会很有帮助