私はspringboot rest serviceを持っています。ユーザーはこのJava POJOにデシリアライズされますJSONオブジェクトを渡し:Java 8ジャクソンの妥当性確認
public final class Request {
private String id;
private double code;
private String name;
public String getId() {
return id;
}
public double getCode() {
return code;
}
public String getName() {
return name;
}
}
したがって、ユーザーは、次のJSONに合格する必要があります。
{
"id": “123457896”,
"code": "Foo",
"name": "test"
}
は、私は必要なすべてのフィールドを作りたいです。多かれ少なかれ何かを提供することは例外をスローするでしょう。デシリアライズ時に入力を検証するようにjacksonに指示する方法はありますか?私は@JsonProperty(required=true)
を試しましたが、これはうまくいきません。明らかにhereとhereからは、JsonProperty
注釈は尊重されていないようです。
私は私のコントローラに呼び出し、このバリデータがあります。
@Component
public class RequestValidator implements Validator {
@Override
public boolean supports(Class<?> clazz) {
return false;
}
@Override
public void validate(Object target, Errors errors) {
String id = ((Request) target).getId();
if(id == null || id.isEmpty()) {
throw new InvalidRequestException("A valid id is missing. Please provide a non-empty or non-null id.");
}
}
}
しかし、単にすべてのフィールドをチェックするために退屈で醜いと思われることを。私はjava 8、spring boot、jacksonの最新バージョンを使用していますので、入ってくるjson入力を検証する上でベストプラクティスは何ですか?それとも、私はすでに最新の方法でそれをやっていますか?
この手法では、検証が失敗したときに上記のように自分のカスタム例外をスローするにはどうすればよいですか? – Richard
スローされた例外に対して@ExceptionHandlerアノテーションを使用し、必要な応答を提供できます。そのような何か:@ResponseStatus(値= HttpStatus.BAD_REQUEST) @ExceptionHandler({HttpMessageNotReadableException.class、MethodArgumentNotValidException.class、 HttpRequestMethodNotSupportedException.class}) 公共ResponseEntity badRequest(HttpServletRequestの要求、例外例){ –