如何将JSON数组字段传递给Spring REST Controller

问题描述 投票:0回答:1

我有一个下拉多个选择框来选择0..N状态,我正在传递给Spring REST控制器。 在JQuery中,JSON如下所示:{“ states”:[“ California”,“ Vermont”]}。 当我尝试在控制器中获取这些值时,我只有1个状态:States [] / California。 另外,states []括号让我觉得我缺少什么,因为它看起来像数组名,但控制器期望使用Map。 有任何想法吗 ?

$(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"));                   
    }   
}

更新2:如建议的那样:

    @PostMapping(path = "/api/campaign/stats",consumes = "application/json")
public List<String> getSearchResultViaAjax(@RequestBody Map<String, List<String>> allParams) {

然后我在AJAX调用中使用了数据类型和内容类型

 $(document).ready(function() { 
   $('select').change(function() {       
        //var formData = JSON.stringify($("#cstates").serializeArray());
        var states = { states : $("#cstates").val(), zips : $("#czips").val()};

        //alert(JSON.stringify(states));
        $.ajax({
          type: "POST",
          url: "http://localhost:8080/api/campaign/stats",
          data: JSON.stringify(states),
          cache: false,
          success: function(data){
             $("#resultarea").text(data);
          },
          dataType: "json",
          contentType : "application/json"
        });

   }); 
});
jquery json spring rest spring-rest
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.