第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

當(dāng)我嘗試反序列化抽象類時(shí),Jackson Objectmapper 在配置為 bean 后未由

當(dāng)我嘗試反序列化抽象類時(shí),Jackson Objectmapper 在配置為 bean 后未由

jeck貓 2023-07-13 14:10:47
我在 Spring Boot 應(yīng)用程序中使用 Jackson xml 版本 2.9.9。我有一個(gè)接受 Vehicle 的控制器,它是一個(gè)具有 2 個(gè)子類的抽象類。當(dāng)我從郵遞員傳遞 JSON 數(shù)據(jù)時(shí),我無法反序列化車輛,因?yàn)樽詣舆B接的對象映射器始終為空(我將對象映射器配置為 bean,因?yàn)槲覍⒎葱蛄谢髟O(shè)置為映射器的簡單模塊)。@RequestMapping(path = "/jackson", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)? ? public void forSingleObject(@RequestBody MyModel myModel){? ? ? ? System.out.println("Deserialization successful");? ? }MyModel.javapublic class MyModel {? ? private String name;? ? private Vehicle value;}Vehicle.javapublic abstract class Vehicle {? ? private String vehicleName;}Car.javapublic class Car extends Vehicle{? ? private String carType;? ? private String carDriverName;}Auto.javapublic class Auto extends Vehicle {? ? private String autoType;? ? private String autoDriverName;}ObjectMapper bean 配置@Configurationpublic class MapperConfig {? ? @Bean? ? public ObjectMapper objectMapper(){? ? ? ? ObjectMapper objectMapper = new ObjectMapper();//Jackson2ObjectMapperBuilder.json().build();? ? ? ? List<Module> modules = new ArrayList<>();? ? ? ? modules.add(new SimpleModule().addDeserializer(Vehicle.class, new VehicleDeserializer()));? ? ? ? objectMapper.registerModules(modules);? ? ? ? return objectMapper;? ? }}VehicleDeserializer.javapublic class VehicleDeserializer extends JsonDeserializer<Vehicle> {? ? @Autowired? ? private ObjectMapper objectMapper;? ? @Override? ? public Vehicle deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {? ? ? ? JsonNode jsonNode = jsonParser.getCodec().readTree(jsonParser);? ? ? ? Vehicle vehicle=null;? ? ? ? if (!jsonNode.findPath("carDriverName").equals("")){? ? ? ? ? ? vehicle = objectMapper.readValue(jsonParser, Car.class);? ? ? ? }else if (!jsonNode.findPath("autoDriverName").equals("")){? ? ? ? ? ? vehicle = objectMapper.readValue(jsonParser, Auto.class);? ? ? ? }? ? ? ? return vehicle;? ? }
查看完整描述

3 回答

?
慕桂英4014372

TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超13個(gè)贊

無需嘗試注入ObjectMapper您的自定義解串器。你可以使用:

ObjectMapper mapper = (ObjectMapper) jsonParser.getCodec();

如果您不需要 中的任何方法ObjectMapper,則不需要強(qiáng)制轉(zhuǎn)換:

ObjectCodec codec = jsonParser.getCodec();


查看完整回答
反對 回復(fù) 2023-07-13
?
慕無忌1623718

TA貢獻(xiàn)1744條經(jīng)驗(yàn) 獲得超4個(gè)贊

問題的原因,你正在這樣做:

modules.add(new SimpleModule().addDeserializer(Vehicle.class, new VehicleDeserializer()));

您正在自己實(shí)例化該對象,因此映射器將為空。


查看完整回答
反對 回復(fù) 2023-07-13
?
達(dá)令說

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超6個(gè)贊

您在反序列化器中犯了一些錯誤:

  • 因?yàn)槟鷮⒎葱蛄谢髯缘椒葱蛄谢鲀?nèi)的對象,所以您可以通過where is typeObjectMapper獲取它。(ObjectMapper) parser.getCodec()parserJsonParser

  • findPath方法返回JsonNode并不String總是.equals("")返回false。你應(yīng)該使用isMissingNode方法來代替。

  • 當(dāng)您在對象上使用readTree方法時(shí)parser,您不能再次使用它,因?yàn)榉葱蛄谢呀?jīng)完成并且您有一個(gè)JsonNode. 從現(xiàn)在開始,你應(yīng)該使用它。您可以使用convertValue方法將其轉(zhuǎn)換為所需的Class。

事情應(yīng)該是這樣的:

class VehicleDeserializer extends JsonDeserializer<Vehicle> {


    @Override

    public Vehicle deserialize(JsonParser parser, DeserializationContext deserializationContext) throws IOException {

        // cast to ObjectMapper

        ObjectMapper mapper = (ObjectMapper) parser.getCodec();


        // read JSON as tree to JsonNode object

        // since now `parser` should not be used anymore.

        JsonNode root = mapper.readTree(parser);

        Vehicle vehicle = null;

        if (!root.findPath("carDriverName").isMissingNode()) {

            vehicle = mapper.convertValue(root, Car.class);

        } else if (!root.findPath("autoDriverName").isMissingNode()) {

            vehicle = mapper.convertValue(root, Auto.class);

        }

        return vehicle;

    }

}


查看完整回答
反對 回復(fù) 2023-07-13
  • 3 回答
  • 0 關(guān)注
  • 245 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號