0

JAXB と JSON を使用して、jqGrid を使用するための一般的な Java POJO ラッパーを実装しています。これは CXF サービスであるため、選択したマーシャラー ライブラリは Jettison または Jackson のいずれかです。

@XmlRootElement(name = "response")
public class JQGridResponseWrapper<T> {

private PaginatedResults<T> results;

public JQGridResponseWrapper() {
}

public JQGridResponseWrapper(PaginatedResults<T> results) {
    this.results = results;
}

@XmlElementWrapper(name = "records")
@XmlElement(name = "record")
public List<T> getRecords() {
    return results.getRecords();
}

@XmlElement(name = "pager")
public Pager getPager() {
    return results.getPager();
}
}

一般的なラッパーによってラップされる POJO の例を次に示します。

@XmlRootElement
public class Note {

private Long id;
private String subject;
private String description;

private Project project;

public Note() {}

public Note(Long id, String subject, String description, Project project) {

    this.id = id;
    this.subject = subject;
    this.description = description;
    this.project = project;
}

@XmlElement(name="noteId")
public Long getId() {
    return id;
}

public void setId(Long id) {
    this.id = id;
}

public String getSubject() {
    return subject;
}

public void setSubject(String subject) {
    this.subject = subject;
}

public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}

public Project getProject() {
    return project;
}

public void setProject(Project project) {
    this.project = project;
}

}

XML にマーシャリングすると、すべてが正常に機能し、すべての型が正しくマップされ、要素<records>の配列を含む親要素が取得され<record>ます。しかし、JSON にマーシャリングする場合 (プロジェクトの要件)、'record' 要素に名前が付けられていないため、jqGrid がチョークします。

{"records":[
{"subject":"subject aaa",
 "description":"Description dsifj ofdisjo",
 "project":{
    "projectCode":"HWIIA",
    "description":"project description",
    "brand":null,
    "projectId":101
    },
 "noteId":201
},
{"subject":"subject bbb",
 "description":"Description odisfj doisjf odsijf",
 "project":{
    "projectCode":"HWIIA",
    "description":"project description",
    "brand":null,
    "projectId":101
    },
 "noteId":202
},
{"subject":"subject ccc",
"description":"Description oijgf gfoij jgifif",
"project":{
    "projectCode":"HWIIA",
    "description":"project description",
    "brand":null,
    "projectId":101
    },
"noteId":203
}
],
"pager"{
"recordsPerPage":10,
"currentPage":1,
"fromRecord":1,
"toRecord":3,
"totalRecords":3,
"totalPages":1}}

records 配列内の各レコードの名前を取得する必要があります。Jettion または Jackson を使用して、これを機能させる簡単な方法はありますか? Web を検索して検索しましたが、ターゲット マーシャラー ライブラリの簡単な解決策を見つけることができませんでした。MOXY についてはいくつか回答がありましたが、現時点でライブラリを変更するのは問題があります。どんな助けでも大歓迎です。

4

0 に答える 0