我是java开发的初学者,但他之前有过PHP和Python等编程语言的经验。所以很少有人对如何使用开发进行弹簧启动感到困惑。
我正在开发一个具有以下请求的rest API
{
"key":"value",
"key1":"value1",
"platform_settings":[
{"key":"value"}
]
}
我做了什么
我创建了一个RestController,它接受http请求并为资源
创建了一个函数public Share share(@RequestBody final Share share) {
LOGGER.debug("This is the request", share);
return share; //
}
问题1:如果它是任何其他编程语言,如PHP或Python,将会有一个辅助函数,它将接受json请求并将其转换为我可以轻松处理的对象。
在python中它就像
一样简单import json
import requests
response = requests.get(...)
json_data = json.loads(response.text)
//can work on json_data anyway I want.
但在java中,我将不得不创建一个POJO类,或者将jackson / JPA实体作为依赖项,将请求映射到一个类(我应该预先定义请求)。
有没有更好的方法可以做到这一点?对于我提出的每个请求,我都必须创建一个可以映射到请求的类,我将不得不定义类
Entity
package com.payunow.socialsharemodule.models;
import java.util.Map;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class Share {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String key;
private String key1;
private Map<String,String> platform_settings;
public Share(String name, String description,Map<String,String> platform_settings) {
this.key = key;
this.key1 = key1;
this.platform_settings = platform_settings;
}
//for JPA
public Share() {}
public String getKey() {
return key;
}
public String getKey1() {
return key1;
}
public Map<String,String> getPlatform_settings() {
return platform_settings;
}
}
对于我发出的每个请求,我都必须创建一个定义其内部变量的类。这是唯一的方法吗?
答案 0 :(得分:6)
你需要杰克逊依赖于将json转换为java对象。但是Spring默认提供它,所以你不必明确地添加它。
您不需要JPA实体。仅当您要将收到的数据存储到数据库中时才需要这样做 只是为了接受请求,您不必创建单独的pojo类。看看这段代码
myApp.controller('DemoController2', ['$scope', '$rootScope', function DemoController($scope,$rootScope) {
var fullName = $rootScope.currUser.fullName;
}])
正如您在此处所见,它将字符串作为请求并将其转换为通用JSONObject。所以基本上你可以将任何json传递给这个端点。
答案 1 :(得分:0)
您可以使用ObjectMapper类,它具有诸如convertValue和realValue之类的方法。