Порт другого исполнительного механизма (сервера управления) изменяет HTTP-ответ

Мне трудно в Chaos Monkey For Spring Boot относительно ответов об ошибках, когда пользователь POST отправляет недействительный (например, {"level": -2}обновление через REST до конечной точки нашего исполнительного механизма, где можно обновить параметры поведения CMSB (разрешены только положительные уровни). На первом изображении я установилmanagement.server.port к 8888 и порт приложения на 8080. При публикации нового свойства в CMSB REST API я получаю следующий ответ (чего мы не ожидали):

И если я оставлю порт управления на том же порту, что и приложение, я получаю следующий ответ:

В обоих случаях мы ожидали одного и того же ответа об ошибке (второй). Итак, мы спрашиваем нас (в CMSB), является ли это предполагаемым поведением весенней загрузки, а если нет, то какие у нас есть варианты, чтобы написать собственный обработчик ответа на ошибку в случае, если порт управления отличается от порта приложения. Обратите внимание, что речь идет не о предполагаемом поведении обезьяны хаоса для весенней загрузки, а о том, является ли это ошибкой весенней загрузки или нет. В обоих случаях мы хотели бы получить подробный ответ об ошибке, чтобы пользователь знал, что не так. Под капотом мы используем@Validated аннотация в сочетании с чем-то вроде этого для проверки ввода:

@Data
@NoArgsConstructor
@Validated
@JsonInclude(JsonInclude.Include.NON_NULL)
public class AssaultPropertiesUpdate {
    @Nullable
    @Min(value = 1)
    @Max(value = 10000)
    private Integer level;

Замечание: в обоих случаях сообщение об ошибке в журналах верное. Но только во втором случае это сообщение об ошибке

WARN 4477 --- [nio-8080-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.bind.MethodArgumentNotValidException: Validation failed for argument [0] in public org.springframework.http.ResponseEntity<?> de.codecentric.spring.boot.chaos.monkey.endpoints.ChaosMonkeyRestEndpoint.updateAssaultProperties(de.codecentric.spring.boot.chaos.monkey.endpoints.AssaultPropertiesUpdate): [Field error in object 'assaultPropertiesUpdate' on field 'level': rejected value [-2]; codes [Min.assaultPropertiesUpdate.level,Min.level,Min.java.lang.Integer,Min]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [assaultPropertiesUpdate.level,level]; arguments []; default message [level],1]; default message [must be greater than or equal to 1]] ]

используется в качестве полезной нагрузки ответа.

Минимальный пример проекта: https://github.com/fletchgqc/mediator Начните проект сmvn spring-boot:run. а затем выполните POST противhttp://localhost:8080/actuator/chaosmonkey/assaults с полезной нагрузкой: {"level": -2}. Должен быть показан правильный ответ об ошибке (как на изображении 2).

Затем остановите проект, чтобы https://github.com/fletchgqc/mediator/blob/master/src/main/resources/application.properties добавитьmanagement.server.port=8888и снова запустите приложение. Сделайте POST противhttp://localhost:8888/actuator/chaosmonkey/assaultsс той же полезной нагрузкой, что и раньше. Должно появиться неправильное сообщение об ошибке (как на изображении 1).

1 ответ

Решение

Похоже, команда Spring исправила это здесь: https://github.com/spring-projects/spring-boot/issues/21036

Другие вопросы по тегам