![](/img/trans.png)
[英]Validation of JWT token along with requestBody parameter in springBoot
[英]SpringBoot @RequestBody validation of abstract class
我正在嘗試在我的 spring-boot 應用程序中模擬來自 OpenAPI 規范的oneOf構造。 我有一個抽象的 class Apple
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "color")
@JsonSubTypes({
@JsonSubTypes.Type(value = RedApple.class, name = "RED"),
@JsonSubTypes.Type(value = GreenApple.class, name = "GREEN")
})
public abstract class Apple {
@NotNull
private Color color;
public Color getColor() {
return color;
}
public void setColor(Color color) {
this.color = color;
}
public enum Color {
RED, GREEN
}
}
和兩個子類
public class RedApple extends Apple {
}
public class GreenApple extends Apple {
}
這也是我的 rest controller
@RestController
@RequestMapping("/apples")
public class AppleController {
@PostMapping
public ResponseEntity<Void> createApple(@Valid @RequestBody Apple apple) {
return ResponseEntity.created(URI.create("/foo")).build();
}
}
問題是@Valid 沒有正確驗證枚舉字段。 即使我發送 {"color": "RED"} 作為正文,驗證也會失敗,並顯示一條消息說顏色不能是 null
當我使用非抽象 class 並且沒有 JsonSubTypes 和 JsonTypeInfo 注釋做完全相同的事情時,一切都像魅力一樣。 我在這里錯過了什么?
謝謝
你試圖創建的 object 是抽象的 class,正如我們所知,抽象類不能被實例化抽象的整個想法是避免訪問 class 本身,而不是如果你傳遞 class object 已經實現了 9815918218 抽象 82183解決你的問題
例如通過紅色
public ResponseEntity<Void> createApple(@Valid @RequestBody RedApple apple) {
return ResponseEntity.created(URI.create("/foo")).build();
}
將visible = true
作為參數添加到 JsonTypeInfo 解決了問題@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, visible = true, property = "color")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.