Я использую com.fasterxml.jackson.databind
в приложении с весенней загрузкой. Когда я отправляю запрос моей конечной точке, я получаю следующее исключение:
com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of
org.pacakge.domain.controller.Mycontroller (although at least one Creator exists): cannot
deserialize from Object value (no delegate- or property-based Creator)\n at
[Source: (PushbackInputStream); line: 2, column: 3] Is the body of the request formatted correctly?
Мой контроллер обрабатывает тело запроса, имеющее следующую структуру:
{
"portalId": 123,
"objectType": "TYPE",
"objectTypeId": "0-3",
"objectId": 123,
"properties": { ... }
}
Единственное свойство, которое мне нужно это objectId
. Я создал класс для обработки этого объекта следующим образом:
@lombok.Value
private static class MyObject {
@JsonAlias("objectId")
private final String dealId;
}
Я разработал контроллер, который выглядит следующим образом
@Slf4j
@RestController
@RequestMapping(path = "/entrypoint")
public class MyController {
@Autowired
public MyController(){}
/**
* REST endpoint handles MyObject
*/
@PostMapping(value = "/endpoint")
public void handleRequest(
@Valid @RequestBody MyObject command
) {
log.debug(command.getDealId());
}
@lombok.Value
private static class MyObject {
@JsonAlias("objectId")
private final String dealId;
}
}
Что интересно в этой проблеме, так это то, что мой Запрос обрабатывается очень хорошо, если я изменяю MyObject
на следующую структуру:
@lombok.Value
private static class MyObject {
@JsonAlias("objectId")
private final String dealId;
private final JSONObject properties; // TODO we shouldn't need this. Fix.
}
Я не могу понять, в чем проблема. Я хотел бы помочь с этой проблемой. Может быть, есть аннотация, которую мне не хватает? Я надеюсь, что кто-то еще столкнулся с этой проблемой. Я не нашел никакой информации об этом, просто выполняя поиск в Интернете.