Jquery 如何将JSON数组字段传递给Spring REST控制器
我有一个下拉多选择框来选择0..N状态,我正在传递给Spring REST控制器。在JQuery中,JSON如下所示:{“states”:[“California”,“Vermont”]}。当我试图在控制器中获取这些值时,我只有一个州:states[]/California。另外,states[]括号让我觉得我遗漏了什么,因为它看起来像一个数组名,但控制器需要一个映射。有什么想法吗Jquery 如何将JSON数组字段传递给Spring REST控制器,jquery,json,spring,rest,spring-rest,Jquery,Json,Spring,Rest,Spring Rest,我有一个下拉多选择框来选择0..N状态,我正在传递给Spring REST控制器。在JQuery中,JSON如下所示:{“states”:[“California”,“Vermont”]}。当我试图在控制器中获取这些值时,我只有一个州:states[]/California。另外,states[]括号让我觉得我遗漏了什么,因为它看起来像一个数组名,但控制器需要一个映射。有什么想法吗 $(document).ready(function() { $('select').change(fun
$(document).ready(function() {
$('select').change(function() {
var states = { states: $("#cstates").val()};
alert(JSON.stringify(states));
$.ajax({
type: "POST",
url: "http://localhost:8080/api/campaign/stats",
data: states,
cache: false,
success: function(data){
$("#resultarea").text(data);
}
});
});
});
以下是REST控制器代码:
@Slf4j
@RestController
public class CampaignStatsRESTController {
@Autowired
JdbcTemplate jdbcTemplate;
@PostMapping("/api/campaign/stats")
public List<String> getSearchResultViaAjax(@RequestParam Map<String,String> allParams) {
//All SQL query parameters
for (Map.Entry<String, String> entry : allParams.entrySet()) {
log.info(entry.getKey() + "/" + entry.getValue());
}
//Send query -- TO DO : Add parameters
return jdbcTemplate.query("select count(*) as cnt from [dbo].[LineOfBusiness1CampaignTempOutput]", (rs, rowNum) -> rs.getString("cnt"));
}
}
Map
不是您需要的。您的结构可以用Map
来描述,不幸的是,它在Spring中不起作用:(
如果要将此信息作为查询参数传递,并且键“states”是静态的,那么最好的选择是:
@PostMapping("/api/campaign/stats")
public List<String> getSearchResultViaAjax(@RequestParam List<String> states) {
如果“states”键是动态的,我将在请求正文中传递它:
@PostMapping("/api/campaign/stats")
public List<String> getSearchResultViaAjax(@RequestBody Map<String, List<String>> allParams) {
@PostMapping(“/api/campaign/stats”)
公共列表GetSearchResultViajax(@RequestBody Map allParams){
看起来您正在做一个普通的POST,因此数据将在正文中转换为查询字符串。鉴于states
键的值是一个数组,这有点奇怪。我建议尝试在states对象中使用JSON.stringify数组,以便在生成正文时,states的值将是一个JSON string。然后,您的控制器只需解析它就可以将其转换为数组。Agates是动态的,所以我想使用@RequestBody,但我得到了[nio-8080-exec-4].w.s.m.s.DefaultHandlerExceptionResolver:Resolved[org.springframework.web.HttpMediaTypeNotSupportedException:Content-type'application/x-www-form-urlencoded;charset=UTF-8'不受支持]我在想也许我需要JQuery中的contentType:“application/json”,但这并没有改变任何东西。@mkirouac您能将其转换为json并使用
Content-type=application/json
?(如下:)不幸的是,同样的错误。添加下面的新代码将允许我在注释部分添加它
@PostMapping("/api/campaign/stats")
public List<String> getSearchResultViaAjax(@RequestParam List<String> states) {
/api/campaign/stats?states=California,Vermont
@PostMapping("/api/campaign/stats")
public List<String> getSearchResultViaAjax(@RequestBody Map<String, List<String>> allParams) {