Priyan at Dialog
Priyan at Dialog

Reputation: 319

Create JsonObject from @ResponseBody

@RequestMapping(value = "/dropDown", method = RequestMethod.GET)
public @ResponseBody
DropDown getList(Map<String, Object> map, HttpServletRequest request,
        HttpServletResponse response) {
    DropDown dropDown = new DropDown();
    List<Map<String, Object>> rows = new ArrayList<Map<String, Object>>();
    List<MapTable2> list = contactService.mapProcess();
    for (MapTable2 table : list) {
        Map<String, Object> dataRow = new HashMap<String, Object>(1);
        dataRow.put("text", table.getProcess());
        dataRow.put("value", table.getId());
        dataRow.put("selected", false);
        dataRow.put("description", table.getProcess());
        dataRow.put("imageSrc", "image.jpg");
        rows.add(dataRow);
    }
    dropDown.setRows(rows);
    return dropDown;
}

I need to create following one

var ddData = [
{
    text: "Facebook",
    value: 1,
    selected: false,
    description: "Description with Facebook",
    imageSrc: "http://dl.dropbox.com/u/40036711/Images/facebook-icon-32.png"
},
{
    text: "Twitter",
    value: 2,
    selected: false,
    description: "Description with Twitter",
    imageSrc: "http://dl.dropbox.com/u/40036711/Images/twitter-icon-32.png"
}]

I know the issue with my above java coding , I'm not aware to create json array like above. please check it and help me to correct it.

MapTable2 has ProcessId & ProcessName

public class MapTable2 {
private int id;
private String process;
public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
public String getProcess() {
    return process;
}
public void setProcess(String process) {
    this.process = process;
}

}

Upvotes: 0

Views: 2942

Answers (2)

matsev
matsev

Reputation: 33789

@theon is right.

Since you are using @Responsebody you can let Spring do the JSON conversion for you. Create a class that matches the objects in the JSON array:

public class SomeObject {
    public String getText() { //... }
    public int getValue() { //... }
    public boolean getSelected { // ... }
    public String getDescription { // ... }
    public String getImageSrc { // ... }
}

Populate the objects and return it as a list from your controller:

@RequestMapping(value = "/dropDown", method = RequestMethod.GET)
@ResponseBody
public List<SomeObject> getList(Map<String, Object> map, HttpServletRequest request, HttpServletResponse response) {
     // Get the objects, return them in a list
}

Add the <mvc:annotation-driven /> or the @EnableWebMvc to your application config unless you have not already done so. Make sure that Jackson is available on your classpath and then Spring will automatically serialize your objects to JSON (if the request has Content-Type: application/json. Alternatively, the produces attribute can be added to the @RequestMapping annotation to always return JSON).

Upvotes: 3

Jatin
Jatin

Reputation: 31754

Well Use this library. It is very light weight (16KB) and does exactly what you need. So in your case, you will be using JSONObject which internally extends HashMap and do

JSONObject o = new JSONObject();
o.put("text","whatever text");
o.put("value",1);
o.put("selected",false);
//and so on
JSONArray arr = new JSONArray();
arr.add(o);

The above will give you this:

[
{
text: "Facebook",
value: 1,
selected: false,
description: "Description with Facebook",
imageSrc: "http://dl.dropbox.com/u/40036711/Images/facebook-icon-32.png"
}
]

To add more objects, add more JSONObjects in a loop to JSONArray

So as per your given code, just replace dataRow with 'JSONObject' and rows with JSONArray and thats it. In the end, to retrieve the string, do rows.toString().

Upvotes: 1

Related Questions