我有这样的DTO课程:
package stbet.model.dto.db;
public class UKDashboardEventDTO implements Serializable{
private Long eventId;
private String meetingCode;
private String meetingName;
private String eventTime;
private String eventCode;
private String settleStatus;
private String category;
//getters and setters here:
@Override
public String toString() {
return "eventList{" + "eventId=" + eventId + ", meetingCode=" + meetingCode + ", meetingName=" + meetingName
+ "eventTime=" + eventTime + ", eventCode=" + eventCode + ", settleStatus=" + settleStatus
+ ", category=" + category + '}';
}
}
我做了一些查询,并创建了一个上面DTO类型的java列表。
for(Event ev : eventList){
dto = new UKDashboardEventDTO();
// some stuff
dto.setEventCode(ev.getEventCode());
dto.setEventId(ev.getId());
dto.setEventTime(ev.getEventTime());
dto.setMeetingName(ev.getMeeting().getMeetingName());
dto.setMeetingCode(ev.getMeeting().getMeetingCode());
eventDTOList.add(dto);
}
然后我将此列表添加到Hashmap中并将其转换为JSON对象,如下所示:
Map map = new HashMap();
map.put("eventList",eventDTOList);
现在转换为json:
JSONObject obj = new JSONObject();
try {
obj.put("eventMap", map);
} catch (JSONException ex) {
}
out.println(obj);
out.flush();
out.close();
但是当我从客户端获取此对象时,我在解析或字符串化输出而不是从Java传递的正确dto值时获取dto包/对象名称列表。我得到的是:
"{"eventMap":{"eventList":["stbet.model.dto.db.UKDashboardEventDTO@617538bb","stbet.model.dto.db.UKDashboardEventDTO@56dfaef9","stbet.model.dto.db.UKDashboardEventDTO@775889fd","stbet.model.dto.db.UKDashboardEventDTO@55cb7e41","stbet.model.dto.db.UKDashboardEventDTO@22ce0968","stbet.model.dto.db.UKDashboardEventDTO@4cb9cb2"]}}"
请告诉我如何获取我从Java设置到客户端json的dto值,如上所述没有java包名。
答案 0 :(得分:1)
您应该覆盖DTO上的toString字段,以打印出所有单个字段值。 当你执行out.println(obj);
时,将调用此toString例如
toString() {
// this method should list out all the attributes.
}
您应该使用GSONBuilder来创建gson。例子: Gson: How to exclude specific fields from Serialization without annotations
Gson doesn't parse an exposed field
以下是关于使用GSON的帖子
答案 1 :(得分:1)
首先,您同时使用JSON和GSON库,{1}}存在于JSON 1中,JSONException
注释存在于GSON中。因为我不能按预期工作,所以请确保你不要混合它们。
其次,来自Expose文档
一个注释,指示应该公开此成员以进行JSON序列化或反序列化。
除非您使用GsonBuilder构建Gson并调用GsonBuilder.excludeFieldsWithoutExposeAnnotation()方法,否则此注释无效。
答案 2 :(得分:0)
最后,我可以用你的建议解决它@Trynkiewicz Mariusz和@Paul John。 我做的是: 1.删除@Expose注释 2.重写toString(){...}方法。 3.删除地图实现并使用List。 4.使用gson.toJson(eventList);
这解决了问题,输出现在就像:
[{
“事件ID”:167804,
“meetingCode”: “V5PGB”
“meetingName”: “SprintValley”
“EVENTTIME”: “15:38:00”,
“EVENTCODE”: “10:08:00”,
“类别”: “HR”
},
{
“事件ID”:167805,
“meetingCode”: “V5PGB”
“meetingName”: “SprintValley”
“EVENTTIME”: “15:50:00”,
“EVENTCODE”: “10:20:00”,
“类别”: “HR”
},..]
再次感谢你们......