java - Jackson ObjectMapper 中的泛型静态方法

标签 java jackson objectmapper

我有一个静态方法,旨在使用 ObjectMapper 读取 JSON 并解析为类(在运行时指定)。我想返回“N”类型的对象,但我收到有关使用泛型的错误。

如何让下面的代码完成这个任务?

    public static <N, T extends AbstractRESTApplication> N GET_PAYLOAD( T app, String urlString, REQUEST_TYPE requestType) throws JsonProcessingException, MalformedURLException, IOException, NoSuchAlgorithmException, KeyManagementException {
    HttpsURLConnection con = null;
    try {
        RSSFeedParser.disableCertificateValidation();
        URL url = new URL(urlString);
        con = (HttpsURLConnection) url.openConnection();
        String encoding = Base64.getEncoder().encodeToString((app.getUser() + ":" + app.getPassword()).getBytes("UTF-8"));
        con.setRequestProperty("Authorization", String.format("Basic %s", encoding));
        //con.setDoOutput(true);//only used for writing to. 
        con.setDoInput(true);
        con.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
        con.setRequestMethod(requestType.toString());
        con.setRequestProperty("User-Agent", "Java client");

        DataOutputStream wr = new DataOutputStream(con.getOutputStream());
        //   wr.write(val);
        StringBuilder content;

        try (BufferedReader in = new BufferedReader(
                new InputStreamReader(con.getInputStream()))) {

            String line;
            content = new StringBuilder();

            while ((line = in.readLine()) != null) {
                content.append(line);
                content.append(System.lineSeparator());
            }
            System.out.println(Class.class.getName() + ".GET_PAYLOAD= " + content);
            //Map Content to Class.
            ObjectMapper om = new ObjectMapper();
            return om.readValue(content.toString(),N);//Doesn't Like N type. How do i fix?

        }

    } finally {
        con.disconnect();
    }

}

最佳答案

Java 泛型是使用“类型删除”来实现的。这意味着编译器可以检查类型安全性并在运行时删除类型。

所以你不能像这样使用你的类型变量(“N”)。您必须将实际的类作为参数传递:

public static <N, T extends AbstractRESTApplication> N GET_PAYLOAD( T app,
    String urlString, REQUEST_TYPE requestType,
    Class<N> nClass) throws ... {

    return om.readValue(content.toString(), nClass);

关于java - Jackson ObjectMapper 中的泛型静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62452365/

相关文章:

java - 防止 Selenium WebDriver 在捕获异常后退出

Java 类型转换和变量类型赋值

java - 尝试将 flyway 用于多个数据库实例

java - 如何在 JSP 页面中显示 Pretty Print JSON 字符串

json - Swift 将 ObjectMapper 与单例一起使用

ios - 如何映射对象(Alamofire 对象映射器)

JavaMail - 发件人地址被拒绝 : Access Denied

java - Jackson JSON 在序列化之前修改对象

java - jackson 特定字段名称

java - 如何将 joda dateTime 转换为 swagger 中的字符串