Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 如何将JSON数组字段传递给Spring REST控制器_Jquery_Json_Spring_Rest_Spring Rest - Fatal编程技术网

Jquery 如何将JSON数组字段传递给Spring REST控制器

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

我有一个下拉多选择框来选择0..N状态,我正在传递给Spring REST控制器。在JQuery中,JSON如下所示:{“states”:[“California”,“Vermont”]}。当我试图在控制器中获取这些值时,我只有一个州:states[]/California。另外,states[]括号让我觉得我遗漏了什么,因为它看起来像一个数组名,但控制器需要一个映射。有什么想法吗

$(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) {