java - 将 Http Servlet 请求转换为 json 到我定义的对象

标签 java json http

我有一个模型类...

public class Incident implements Serializable {
    private Long id;
    private Integer refNo;
    private String type;
    private Double lossAmt;
    private Date incidentDate;
    private Date incidentTime;
    private Date reportingDate;
}

FTL 就像...

     <form action="saveIncident.do" method="POST" >

        <input type="text" name="type" value="A">
        <input type="text" name="refNo" value="546">
        <input type="text" name="lossAmt" value="45000">
        <input type="text" name="incidentDate" value="10/05/2017">
        <input type="text" name="reportingDate" value="18/05/2017">

        <input type="submit" value="Save">
     </form>

我正在尝试从 HttpServletRequest 请求获取对象

    Map<String, String[]> map = request.getParameterMap();
    String formData = new Gson().toJson(map); 

以上代码返回 formData{"type":["A"],"lossAmt":["45000"],"incidentDate":["10/05/2017"],"reportingDate":["18/05/2017"],"refNo":[""]}.然后我打电话..

    Gson gson = new GsonBuilder().setDateFormat("dd/MM/yyyy").create();
    Incident incident = gson.fromJson(formData, Incident.class);    

此抛出com.google.gson.JsonSyntaxException 但是,当我使用 .. 替换所有数组符号 [ & ]

formData = formData.replaceAll("[\\[ \\]]", ""); // {"type":"A","lossAmt":"45000" ....

然后就可以正常工作了。因此,如何在不替换数组符号的情况下转换为事件对象?

com.google.gson.JsonSyntaxException

最佳答案

恕我直言,问题已经出现在您解析参数的地方,

Map<String, String[]> map = request.getParameterMap();
String formData = new Gson().toJson(map); 

如您所见,您的参数是数组。

{"type":["A"], ... }

请注意,Gson 不会将数组转换为标量(简单变量)本身。

我会尝试:

    Map<String, String> params = new HashMap<>();

    Map<String, String[]> parameterMap = request.getParameterMap();
    parameterMap.forEach((key,value) -> { params.put(key, value[0]); });

为了简化起见,这里我们假设非空值并忽略其他(多个)值(如果存在)。你应该处理它

关于java - 将 Http Servlet 请求转换为 json 到我定义的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44068216/

相关文章:

java - 如何将调用注释的类名和方法作为 "value"传递给注释属性

mysql - 我想使用 Sequelize 将 MySQL 中的对象数组存储在单个列中

json - 将 "{}"主体解码为结构时,Golang 不会产生错误

android - 将 AQuery 库与 PUT 请求和 StringEntity(String) 结合使用

Python Flask 解析输出中的 JSON 内容

http - 利用服务器端缓存进行 CSRF 保护

java - 音频文件无法在 Android 中播放

java - 其余非 CRUD 搜索

java - 检查数组中模式的递归方法

java - Java 中是否可以像 PHP 中那样使用混合变量?