Gson手动序列化POJO(工具类)

本文介绍了一个使用 Gson 2.7 版本将 JSON 转换为 Java 对象的简单示例。示例中定义了一个 User 类并展示了如何通过 Gson 将 JSON 字符串解析成该类的对象。

gson2.7版本

只是简单的工具类(练习所用):

package pojo;
import javax.xml.bind.annotation.XmlSeeAlso;

import com.google.gson.annotations.SerializedName;

public class User {
    public String name;
    public int age;
    @SerializedName(value="email_Address",alternate={"email"})
    public String emailAddress;
    public User() {
    }
    public User(String name, int age, String emailAddress) {
        super();
        this.name = name;
        this.age = age;
        this.emailAddress = emailAddress;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getEmailAddress() {
        return emailAddress;
    }
    public void setEmailAddress(String emailAddress) {
        this.emailAddress = emailAddress;
    }
    @Override
    public String toString() {
        return "User [name=" + name + ", age=" + age + ", emailAddress=" + emailAddress + "]";
    }
    
    
}
package utils;

import java.io.IOException;
import java.io.StringReader;
import java.lang.reflect.Field;

import com.google.gson.Gson;
import com.google.gson.stream.JsonReader;

import pojo.User;

/**
 * 处理json工具类
 * @Description:
 * @author zbs
 * @date 2016年9月30日 上午10:06:05
 */
public class JsonUtils {
    public static void main(String[] args) {
        String json="{\"name\":\"学学习\",\"age\":\"24\"}";
        User user = (User) getObjectFromJson(User.class, json);
        System.out.println(user);
    }
    /**
     * json-->pojo
     * @Description:序列化json
     * @param clazz
     * @param json
     * @return void 返回类型
     */
    @SuppressWarnings("all")
    public static  Object getObjectFromJson(Class clazz, String json) {
        JsonReader reader = new JsonReader(new StringReader(json));
        Field[] field = clazz.getDeclaredFields();
        Object obj = null;
        try {
            // 获取当前对象
            obj = clazz.newInstance();
            reader.beginObject();
            while (reader.hasNext()) {
                String name = reader.nextName();
                for (Field f : field) {
                    if (f.getName().equals(name)) {
                       if (f.getType() == int.class) {
                            f.setInt(obj, reader.nextInt());
                        }else if(f.getType() == Double.class){
                            f.setDouble(obj, reader.nextDouble());
                        }else if (f.getType() == Long.class) {
                            f.setLong(obj, reader.nextLong());
                        }else if (f.getType() == Boolean.class) {
                            f.setBoolean(obj, reader.nextBoolean());
                        }else{
                            f.set(obj, reader.nextString()); 
                        }
                    }
                }
            }
            reader.endObject();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return obj;
    }
}

  

  

转载于:https://www.cnblogs.com/byteworld/p/5923197.html

### CTFHUB 平台上的 SSRF 漏洞详情 在 CTFHUB 平台上,SSRF (Server-Side Request Forgery, 服务器端请求伪造) 是一种常见且重要的漏洞类别。该类漏洞允许攻击者通过构造特定的 URL 或参数来诱导服务器向指定目标发起 HTTP 请求。 #### 基本概念与影响范围 通常情况下,SSRF 攻击旨在使受害的应用程序作为代理去访问那些对外部网络不可见但对应用程序可见的服务资源。这些内部服务可能存储敏感数据或提供管理接口,一旦被恶意利用可能导致严重的后果[^3]。 #### 利用方式实例分析 对于某些 PHP 应用环境下的 SSRF 场景,在实际操作过程中发现了一种特殊的 payload 构造方法: ```plaintext http://challenge-80b40c7bb0f917cb.sandbox.ctfhub.com:10800/?url=http://notfound.ctfhub.com@127.0.0.1/flag.php ``` 上述 Payload 的特点在于它巧妙地运用了 `@` 符号将外部域名指向本地 IP (`127.0.0.1`) ,从而绕过了简单的黑名单过滤机制并成功触发了 SSRF 行为,最终实现了对 `/flag.php` 文件内容的非法获取[^4]。 #### 解决方案建议 针对此类问题的有效缓解措施可以从以下几个方面入手: - **输入验证加强**:严格校验用户提交的数据合法性,特别是涉及远程调用功能时要特别谨慎处理 URL 参数。 - **白名单策略实施**:仅限于信任列表内的主机名/IP 进行通信交互;同时考虑加入 DNS 缓存刷新逻辑防止缓存投毒风险。 - **协议限制应用**:避免支持过多不必要的协议(如 gopher:// 等),减少潜在威胁面。 - **防火墙配置优化**:合理设置云服务商提供的安全组规则以及 VPC 内网 ACL 控制,阻止来自公网对私有子网内资产的未授权访问尝试。 综上所述,为了有效防范 SSRF 类型的安全隐患,开发团队应当综合采取多种防护手段相结合的方式,并持续关注最新的攻防动态和技术趋势以确保系统的安全性得到保障[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值