我在Spring中構建了一個REST api,並且在處理異常時遇到了問題。我想驗證完整請求並一次性提供有關有效負載的信息。Spring jackson反序列化和異常處理
假設我的目標是
public class StubJson {
private BigDecimal bigDecimalField;
@NotEmpty
private String stringField;
public void setBigDecimalField(BigDecimal bigDecimalField) { this.bigDecimalField = bigDecimalField; }
public String setStringField(String stringField) { this.stringField = stringField; }
}
我的控制器是
@RestController
public class StubController {
@RequestMapping(value = "/stub", method = POST)
public void stub(@Valid @RequestBody StubJson stubJson) {}
}
這個對象上的驗證是在轉變FieldError對象到最終用戶轉換誤差的@ControllerAdvice。
@ResponseStatus(BAD_REQUEST)
@ResponseBody
@ExceptionHandler(value = MethodArgumentNotValidException.class)
public List<ErrorJson> processValidationError(MethodArgumentNotValidException ex) {}
如果我通過在此JSON
{"bigDecimalField": "text", "stringField": ""}
我想這樣
[
{
"field": "stringField",
"message": "Cannot be empty."
},
{
"field": "bigDecimalField",
"message": "Not a number."
}
]
的響應。如果我這樣做,我得到一個
com.fasterxml。 jackson.databind.exc.InvalidFormatException
上BigDecimalField其中只包含有關只有一個字段的信息。我看到的唯一選擇是將其作爲字符串傳遞或編寫自定義驗證註釋。有沒有更簡單的方法來實現這一點?
即使在準備好驗證之前,對象轉換仍然失敗。爲了實現你想要的東西,需要你的對象需要從你的json請求中成功創建 – ScanQR