Springboot бросает Джексону исключения - PullRequest
0 голосов
/ 19 декабря 2018

Во время тестирования я столкнулся с проблемой. Я опубликовал API отдыха с классом контроллера с входом модели.При вызове API вместо одной строки использовался массив [{"a": 1, "b": 2}].Это вызвало следующую ошибку:

{

"timestamp": "2018-12-19T12:33:36.729+0000",
"status": 400,
"error": "Bad Request",
"message": "JSON parse error: Cannot deserialize instance of `java.lang.String` out of START_ARRAY token; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.lang.String` out of START_ARRAY token\n at [Source: (PushbackInputStream); line: 3, column: 14] (through reference chain: com.xy.df.model.inputReq[\"req\"])",
"path": "x/y/z"

}

Мы не импортировали зависимость JACKSON в приложение, явно в POM.Я заметил, что в родительской версии pom jackson используется следующая версия: 2.9.5

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.5</version>
</dependency>

1.Уязвима ли она для RCE?Как решить эту проблему в Spring-boot?2. Как я могу подавить / переопределить сообщение об исключении, чтобы клиент никогда не узнал, какие библиотеки используются под ним?

Ответы [ 2 ]

0 голосов
/ 06 мая 2019

Я решил проблему.Прежде чем идти вперед, нужно понять пару очень полезных аннотаций - @ExceptionHandler - Этот обработчик помогает вам определить класс ошибок, для которого вы хотите поймать исключение @controller advice - он обслуживает сквозной подход.Любой класс, упомянутый как совет контроллера, доступен для всех контроллеров под вашим микросервисом.

@ControllerAdvice
public class ExceptionController {

    @Autowired
    SomeGenericResponse someGenericResponse ; /* data model of common response */

    @ExceptionHandler(value = <My case Jackson Class>.class)
    public ResponseEntity<SomeGenericResponse> CustomException(HttpServletRequest req, HttpServletResponse res,Exception ex) {


        someGenericResponse.setMessage("Your Message");
        someGenericResponse.setStatus("false");

        return new ResponseEntity<SomeGenericResponse> someGenericResponse ,HttpStatus.BAD_REQUEST);
    }
}
0 голосов
/ 19 декабря 2018

JsonMappingException: out of START_ARRAY token исключение выдается картографом объектов Джексона, так как он ожидает Object {}, тогда как он нашел Array [{}] в ответ.

Эту проблему можно решить, заменив Object на Object[] варгумент для geForObject("url",Object[].class).Справочные материалы:

  1. Ref.1
  2. Ref.2
  3. Ref.3
...