смотрите я сделал такую обертку для всех возвращаемых значений (и из методов контроллеров и из обработчиков ошибок):
public class ResultView<T> {
public final String status;
public final T value;
public final List<Object> errors;
private ResultView(String status, T value, Stream<Object> errors) {
this.status = status;
this.value = value;
this.errors = errors.collect(Collectors.toList());
}
public static <T> ResultView<T> success(T result) {
return new ResultView<>("success", result, Stream.empty());
}
public static <T> ResultView<T> error(Stream<Object> errors) {
return new ResultView<>("error", null, errors);
}
public static <T> ResultView<T> error(Object error) {
return error(Stream.of(error));
}
}
public class ValidationErrorView {
public final String message;
public final String field;
public ValidationErrorView(String message, String field) {
this.message = message;
this.field = field;
}
}
И все бы хорошо, но когда я именно возвращаю ошибки валидации вот так:
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ResponseBody
public ResultView<Object> processValidationError(MethodArgumentNotValidException e) {
Stream<ValidationErrorView> errors = e.getBindingResult().getFieldErrors().stream().map(x -> new ValidationErrorView(x.getDefaultMessage(), x.getField()));
return error(errors);
}
То у меня на фронт приходит вот такой json:
{
"status": "error",
"value": null,
"errors": [
{
"parallel": false
}
]
}
Что это за parallel не подскажете? Очень странно... Для обычных строк и success работает нормально.
а зачем ты все в Stream оборачиваешь это фетиш такой
В BaseStream от которого Stream наследуется, есть метод isParallel, который говорит последовательный стрим у тебя или нет. Если ты маршаллер никак не тюнил, он наверняка это засунет в результат
Обсуждают сегодня