在测试期间,我遇到了这个问题。我发布了带有控制器类和模型输入的rest 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"
}
我们没有在application中明确地在POM中导入JACKSON依赖项。我注意到在父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.如何抑制/覆盖异常消息,以使客户端永远不知道底层使用了哪些库?
答案 0 :(得分:2)
JsonMappingException: out of START_ARRAY token
异常是由杰克逊对象映射器抛出的,因为它期望一个Object {}
,而它却找到了一个Array [{}]
作为响应。
可以通过在Object
的参数中将Object[]
替换为geForObject("url",Object[].class)
来解决。
参考文献:
答案 1 :(得分:0)
我已解决问题。在继续之前,您需要了解几个非常有用的注释-
@ExceptionHandler
-此处理程序可帮助您定义要捕获其异常的错误类
@controller建议-它可以满足跨领域的需求。任何作为控制器建议提及的类,均可用于您的微服务下的所有控制器。
@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);
}
}