Backbone.js Collection.sync & spring endpoint



我有一个backbone.js客户端应用程序和应用层上的Spring。在Backbone中,我正在使用"ServerConfig"对象的集合。。。主干集合的URL指向一个spring端点。

"GET"请求返回名为"ServerRuntimeConfig"的POJO的ArrayList,该POJO最终返回具有以下响应主体的JSON响应:

[{"useIUX":true,"serverDomainName":"localhost","selected":true}]

当我对集合进行"同步"时,会调用"PUT"请求,该请求会发送以下JSON请求,请求正文如下(与GET相同):

[{"useIUX":true,"serverDomainName":"localhost","selected":true}]

问题是,我无法让spring自动将JSON集合映射到PUT上的POJO集合中。。。所以我不得不手动操作。

这是GET终点

@RequestMapping(value = "/runtimeConfigs", 
method = RequestMethod.GET, 
produces = "application/json")
@ResponseBody
public ArrayList<ServerRuntimeConfig> handleConfigRequest(
HttpServletRequest request, 
HttpServletResponse response) {
// first grab all of the hostnames from the properties file
ArrayList<String> allServersDomains = new ArrayList();
List<String> servers = Arrays.asList(
StringUtils.tokenizeToStringArray(
this.getAppProperties().get("serverList"), ","));
allServersDomains.addAll(servers);
MyTTJMXClient jmxClient = new MyTTJMXClient();
return jmxClient.readRemoteConfigurations(allServersDomains);
}

这是PUT端点

@RequestMapping(value = "/runtimeConfigs", 
method = RequestMethod.PUT,
consumes = "application/json", 
produces = "application/json")
@ResponseBody
public ArrayList<ServerRuntimeConfig> handleConfigUpdate(
@RequestBody String body, 
HttpServletRequest request, 
HttpServletResponse response) {
String jsonSource = body;
ObjectMapper mapper = new ObjectMapper();
ArrayList<ServerRuntimeConfig> serverConfigs = new ArrayList();
try {
serverConfigs = mapper.readValue(jsonSource, 
new TypeReference<ArrayList<ServerRuntimeConfig>>() { } );
} catch (IOException e) {
e.printStackTrace();
}
MyTTJMXClient jmxClient;
jmxClient = new MyTTJMXClient();
return jmxClient.setRemoteConfigurations(serverConfigs);
}

有没有一种方法可以避免我在PUT端点中进行的手动Jackson映射?我尝试了以下端点签名,但serverConfigs始终为空

@RequestMapping(value = "/runtimeConfigs", 
method = RequestMethod.PUT,
consumes = "application/json", 
produces = "application/json")
@ResponseBody
public ArrayList<ServerRuntimeConfig> handleConfigUpdate(
ArrayList<ServerRuntimeConfig> serverConfigs, 
HttpServletRequest request, 
HttpServletResponse response) {

同样,手动Jackson映射也能做到这一点,但它并没有使用Spring那种令人敬畏的功能。

有没有其他人构建了一个Spring端点,可以自动将Backbone/JSON集合映射到POJO?

假设您在PUT方法中使用的映射有效,尝试将您的方法签名更改为:

@ResponseBody
public ArrayList<ServerRuntimeConfig> handleConfigUpdate(
ArrayList<ServerRuntimeConfig> serverConfigs, 
HttpServletRequest request, 
HttpServletResponse response) {

至:

@ResponseBody
public ArrayList<ServerRuntimeConfig> handleConfigUpdate(
@RequestBody ArrayList<ServerRuntimeConfig> serverConfigs, 
HttpServletRequest request, 
HttpServletResponse response) {

@RequestBody注释是本文的重要组成部分。它将自动使用spring的转换器(在本例中为jackson)来填充变量。

最新更新