Попытка № 1< /strong>
Я пытался сопоставить один и тот же RequestMapping с двумя разными методами, один из которых вызывался бы, если RequestBody можно было сопоставить с WebDeviceInfo и другой, который был бы вызван, если бы RequestBody можно было сопоставить с IOSDeviceInfo.
Код: Выделить всё
@RequestMapping(value = "/register-device", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
public void registerWebDevice(@RequestBody final WebDeviceInfo webDeviceInfo) {
//register web device
}
@RequestMapping(value = "/register-device", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
public void registerIOSDevice(@RequestBody final IOSDeviceInfo iosDeviceInfo) {
//register ios device
}
Попытка № 2[/b]
Далее я попробовал принять суперкласс как RequestBody и затем преобразовать его в соответствующий подкласс.
Код: Выделить всё
@RequestMapping(value = "/register-device", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
public void registerDevice(@RequestBody final DeviceInfo deviceInfo) {
if (deviceInfo instanceof WebDeviceInfo) {
final WebDeviceInfo webDeviceInfo = (WebDeviceInfo) deviceInfo;
//register web device
} else if (deviceInfo instanceof IOSDeviceInfo) {
final IOSDeviceInfo iosDeviceInfo = (IOSDeviceInfo) deviceInfo;
//register ios device
} else {
logger.debug("Could not cast deviceInfo to WebDeviceInfo or IOSDeviceInfo");
}
}
Не удалось привести данные устройства к WebDeviceInfo или IOSDeviceInfo
Попытка №3
Наконец, я попробовал просто выполнить приведение к правильному подклассу внутри попытки/
Код: Выделить всё
catch
Код: Выделить всё
@RequestMapping(value = "/register-device", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
public void registerDevice(@RequestBody final DeviceInfo deviceInfo) {
try {
final WebDeviceInfo webDeviceInfo = (WebDeviceInfo) deviceInfo);
//register web device
} catch (final ClassCastException ex) {
try {
final IOSDeviceInfo iosDeviceInfo = (IOSDeviceInfo) deviceInfo);
//register ios device
} catch (final ClassCastException ex2) {
logger.debug("Could not cast deviceInfo to WebDeviceInfo or IOSDeviceInfo");
}
}
}
Не удалось привести данные устройства к WebDeviceInfo > или IOSDeviceInfo
Есть ли какой-нибудь способ добиться этого, или мне придется создать два отдельных метода с двумя разными RequestMapping< /code>s?
Подробнее здесь: https://stackoverflow.com/questions/440 ... estmapping