簡體   English   中英

將Java DTO列表轉換為JSON對象

[英]converting java DTO list into JSON object

我有一個像這樣的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包名稱的情況下獲取從Java設置到客戶端json的dto值。

您應該覆蓋DTO上的toString字段,以打印出所有單個字段值。 當您執行out時,將調用此toString。

例如。

toString() {
 // this method should list out all the attributes.
 }

您應該使用GSONBuilder創建gson。 示例: Gson:如何在沒有注釋的情況下從序列化中排除特定字段

Gson不會解析裸露的字段

這也是使用GSON的帖子

如何使用GSon公開方法?

首先,您同時使用JSON和GSON庫,JSON one中存在JSONException,而JSONException存在Expose批注。 請確保不要混用它們,因為我不會按預期工作。

其次,來自Expose文檔

指示此成員的注釋應公開以進行JSON序列化或反序列化。

除非您使用GsonBuilder構建Gson並調用GsonBuilder.excludeFieldsWithoutExposeAnnotation()方法,否則此注釋無效。

最后,我可以根據您的建議@Trynkiewicz Mariusz和@Paul John進行修復。 我所做的是:1.刪除@Expose注釋2.覆蓋了toString(){...}方法。 3.刪除地圖實現並使用一個列表。 4.使用gson.toJson(eventList);

這解決了問題,現在的輸出是:

[{
“ eventId”:167804,“ meetingCode”:“ V5PGB”,“ meetingName”:“ SprintValley”,“ eventTime”:“ 15:38:00”,“ eventCode”:“ 10:08:00”,“ category”: “ HR”},{
“ eventId”:167805,“ meetingCode”:“ V5PGB”,“ meetingName”:“ SprintValley”,“ eventTime”:“ 15:50:00”,“ eventCode”:“ 10:20:00”,“ category”: “ HR”},..]

再次感謝你們...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM