如何从其余Webservice Spring返回自定义响应

时间:2019-01-11 19:03:48

标签: java spring rest spring-boot

我期望输出完全,如下所示(您会看到单引号)

{
    "success": true,
    "friends":  ['Kanchhi@example.com','modi@example.com','maya@example.com','jetli@example.com','john@example.com'] ,
    "count": 5
}

但目前我正在变成这样:(我们必须从中删除双引号)

{
    "success": true,
    "friends": "['Kanchhi@example.com','modi@example.com','maya@example.com','jetli@example.com','john@example.com']",
    "count": 5
}

休息方法

@PostMapping(path = "/my", consumes = MediaType.TEXT_PLAIN_VALUE)
    public ResponseEntity<Map> getFriendListByEmail(@Valid @RequestBody String value) { 
                LinkedHashMap<Object, Object> map23 = new LinkedHashMap<>(); 
                myList=userService.getfriendList(value); //getting some list say we have got 5 list of emails
                String s  ="'"+myList.toString().replace("[","").replace("]", "").replace(" ","").replace(",","','")+"'"; 
                map23.put("success", true);
                map23.put("friends", "["+s+"]"); // trying to put the updated string 
                map23.put("count", myList.size());  
                return new ResponseEntity<Map>(map23, HttpStatus.OK);  
    }

2 个答案:

答案 0 :(得分:4)

对于那些建议他只是将实际列表放置在地图上的人:这个问题要求列表的输出具有单引号的字符串。

但是JSON标准不允许使用单引号引起来的字符串。如果您真的要这样做,则可能需要破解一个避免JSON序列化并手动将整个伪JSON响应写入响应主体的解决方案。当然,这是一个可怕的主意。相反,您应该重新查看使用单引号引起来的字符串的要求。

答案 1 :(得分:2)

虽然亚历山德罗·鲍尔(Alessandro Power)的answer绝对正确,但您可能别无选择。

很明显,所需的响应不是有效的JSON,但诀窍是返回字符串。因此,构造并返回一个字符串,而不是ResponseEntity。声明您的方法,例如:

public String getFriendListByEmail(...)

在正文中不要使用Map,而是使用类似这样的东西:

String s = "{\"success\": true, ";
ObjectMapper om = new ObjectMapper();
s += "\"friends\": " + om.writeValueAsString(myList).replace('"', '\'') + ", ";
s += "\"count\": " + myList.size();
s += "}";
return s;