我有这样的东西:
data class Person(
@JsonProperty("first_name")
var firstName: String,
@JsonProperty("last_name")
var lastName: String,
@JsonProperty("age")
var age: Int
)
@GetMapping("/test")
fun testSpEL(): ResponseEntity<Boolean> {
val person = Person("Tom", "Black", 26)
val parser = SpelExpressionParser()
val expression = parser.parseExpression("age > 18 && first_name == 'Tom'")
val result = expression.getValue(person, Boolean::class.java)
println("##################### $result")
return ResponseEntity(result, HttpStatus.OK)
}
主要关注JSON属性名和成员变量名,它们是不同的。而且我的 SpEL 表达式至少应该与 JSON 字段名称一起使用。 但是,它仅适用于成员变量名称(使用
firstName
但也应与 first_name
一起使用)。first_name
会抛出一个异常,告知在类型 first_name
中找不到 Person
。
我尝试创建 StandardEvaluationContext() 并在其中添加一个 JsonPropertyAccessor(),希望这样可以解决问题。 但是在调试时我注意到它最终被删除了,因为它只接受
String
、JsonNode
和 JsonWrapper
作为类型。我的Person
显然不是其中之一。
有什么方法可以实现我想要的行为吗?
它应该能够在嵌套对象上使用它并使用
@JsonProperty
注释来获取属性的正确名称。我的 SpEL 表达式至少应该与 JSON 字段名称一起工作
不清楚你为什么会这样; SpEL 对 JSON 注释一无所知,它使用简单的属性访问器来访问字段。
您需要创建一个自定义属性访问器来解析字段上的注释并进行映射。