Разные порты привода (сервера управления) изменяют HTTP-ответ - PullRequest
1 голос
/ 17 апреля 2020

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

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

В обоих случаях мы ожидали бы одинакового ответа об ошибке (второй). Поэтому мы спрашиваем нас (в 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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...