【发布时间】:2017-11-16 21:58:30
【问题描述】:
我正在我的网站前端操作以下 JSON 对象
<script>
window.campaign = {
name: "test",
budget: 20.00,
type: 0,
dynamic: false,
geo_target: [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27],
time_target: {
monday: ["00","00","00","00",1],
tuesday: ["00","00","00","00",1],
wednesday: ["00","00","00","00",1],
thursday: ["00","00","00","00",1],
friday: ["00","00","00","00",1],
saturday: ["00","00","00","00",1],
sunday: ["00","00","00","00",1]
},
setName: function(val) {
this.name = val;
},
//some more setters go here
}
</script>
然后我使用 AJAX 将它发送到我的 Spring 应用程序
$.ajax({ type: "POST", url: submit_url, data: JSON.stringify(window.campaign) })
.done(function() { alert( "success" ); })
.fail(function() { alert( "error" ); });
现在的问题是在我的@Controller 中相应地映射所有变量
....
@RequestParam(value = "name", required = false, defaultValue = "") String name,
@RequestParam(value = "budget", required = false, defaultValue = "0") BigDecimal budget,
@RequestParam(value = "type", required = false, defaultValue = "0") int type,
@RequestParam(value = "dynamic", required = false, defaultValue = "false") boolean dynamic,
@RequestParam(value = "geo_target", required = false, defaultValue = "") int[] geoTargeting,
....
这一切都很好,但我不知道如何映射time_target
我尝试创建一个新的Model 并使用@RequestBody 映射它
....
@RequestParam(value = "name", required = false, defaultValue = "") String name,
....
@RequestParam(value = "geo_target", required = false, defaultValue = "") int[] geoTargeting,
@RequestBody TimeTarget timeTargeting
....
没有成功。我使用http://www.jsonschema2pojo.org 为我要发送的整个对象创建了一个Class,但没有成功(仅供参考,它创建了两个类,一个用于 timeTargeting,一个用于其他所有对象)。
我真的很绝望。请帮忙:)如果提供的代码不够,我可以更新更多。
【问题讨论】:
-
1 个解决方案:
@RequestParam(value = "time_target") String[] timeTargeting这个工作适合你吗? -
这个控制器会变得很乱。您可以在一个 POST 参数中发送整个 JSON 字符串。然后在您的后端,您使用一个简单的 JSON 库来解析字符串并从中获取数据。
-
我什至怀疑它是否有效。您发布的是 JSON 而不是请求参数 (afaik)。只需将 JSON 作为正文发送,创建一个对象并将所有参数映射到该对象(jackson 会为您执行此操作)。
-
M. Deinum 或@mumpitz 可以举个例子吗?我试过了,但真的被我在网上找到的不相关的例子弄糊涂了......
-
您可以使用 Jackson 之类的转换器将字符串转换为 Java 对象
标签: java json ajax spring spring-mvc