我使用Spring启动,我在Spring编写rest服务器 我有很多不同的请求映射,我需要接受json中的内容
我可以使用@RequestBody
注释做到这一点
但在这种情况下,我会为每个请求和每个可能的响应提供大量的POJO类。
我需要发送和接收的很多JSON非常简单 - 一个或两个或三个值
是否可以使用@RequestParam("field1_from_my_json")
和@RequestParam("field2_from_my_json")
之类的东西来提取JSON字段作为请求参数,而不是每次都创建新的POJO?
答案 0 :(得分:1)
我不知道春天提供的东西。 但我有一些建议,如果你愿意:)
public class GenericClass { private String field1; private String field2; private String field3; }
答案 1 :(得分:1)
如果您不需要POJO等强类型性质,则可以使用地图作为@RequestBody
和@ResponseBody
:
@RequestMapping(value = "/stuff", method = POST, consumes = APPLICATION_JSON_VALUE, produces = APPLICATION_JSON_VALUE)
@ResponseBody
public Map<String,Object> stuff(@RequestBody Map<String, Object> yourSimpleObject) {
Map<String,Object> response = new HashMap<>();
numMap.put("prop1", "val1");
numMap.put("prop2", "val2");
return Collections.unmodifiableMap(response);
}
答案 2 :(得分:-1)
我可以为您提供我的示例Rest Template,使用Facebook API获取用户信息:
String body = this.restTemplate.getForObject("https://graph.facebook.com/v2.6/{id}?fields=first_name,last_name,locale,timezone,gender&access_token={accessToken}", String.class, urlVars);
String locale = JsonPath.read(body, "$.locale");
或者如果你得到json请求:
@RequestMapping(value = "/user", method = RequestMethod.POST)
public ResponseEntity<?> postWebhook(@RequestBody String body) {
String locale = JsonPath.read(body, "$.locale");
[...]
}
所以我使用Jsonpath。响应json看起来像:
{
locale : "en_US";
...
}
所以我从json:
中读取此属性,然后提取 localeString locale = JsonPath.read(body, "$.locale");