【问题标题】:Angular post not passing payload to java spring via long pollAngular post未通过长轮询将有效负载传递给java spring
【发布时间】:2014-05-05 02:12:06
【问题描述】:

我正在尝试使用 angular 中的 post 将变量传递给 java spring。 java post函数执行了,但是所有参数都为null。

var CreditCard = $resource("http://:host::port/" + context + "/agent/creditCard",
{host: "localhost", port: 8080 }, 
   {getTestPost2: {method:'POST', params:{charge:true, jsonPost:"1234"}}
  });
var newCard = new CreditCard({number:'0123'});
newCard.name = "Mike Smith";
newCard.$save();

我检查了我的网络状态显示 200 OK。

Request Payloadview source
{number:0123, name:Mike Smith}
name: "Mike Smith"
number: "0123"

Java

@RequestMapping(
            value="/agent/creditCard",
            method = RequestMethod.POST,
            produces = MediaType.APPLICATION_JSON_VALUE) 
    public @ResponseBody void getTestPost2( 
                    @PathVariable String clientId, 
                    @RequestParam(value="jsonPost", required=false) String jsonPost, 
                    @RequestParam(value="charge", required=false) boolean charge,               
                    @RequestParam(value="name", required=false) String name,
                    @RequestParam(value="number", required=false) String number
            ){

        logger.debug("jsonPost " + jsonPost);
        logger.debug("name " + name);
        logger.debug("charge " + charge);
        logger.debug("number " + number);

    }

输出:

jsonPost null
name null
charge false
number null

【问题讨论】:

  • 虽然我不熟悉 Angular,但我敢打赌,您的保存方法不会发布表单数据,而是其他内容(可能是 JSON),而 Spring Controller 显然已设置为接受表单参数

标签: java spring angularjs long-polling


【解决方案1】:

Java

@RequestMapping(
            value="/agent/creditCard",
            method = RequestMethod.POST,
            params = { "jsonPost", "charge", "name", "number"}
            produces = MediaType.APPLICATION_JSON_VALUE) 
@ResponseBody
    public @ResponseBody void getTestPost2( 
                    @PathVariable String clientId, 
                    @RequestParam(value="jsonPost", required=false) String jsonPost, 
                    @RequestParam(value="charge", required=false) boolean charge,               
                    @RequestParam(value="name", required=false) String name,
                    @RequestParam(value="number", required=false) String number
            ){

        logger.debug("jsonPost " + jsonPost);
        logger.debug("name " + name);
        logger.debug("charge " + charge);
        logger.debug("number " + number);

    }

我加了params和ResponseBody,你可以试试。

【讨论】:

  • 嗨@smallg,我试过你的答案,但它不起作用。后调用未执行,我收到 400 标头错误。
【解决方案2】:

您应该编写一个CreditCard 类来用作参数类型。用@RequestBody 注释它,让HttpMessageConverter 将JSON 正文转换为所需的对象。

@ResponseBody
@RequestMapping(
        value="/agent/creditCard",
        method = RequestMethod.POST,
        consumes = MediaType.APPLICATION_JSON_VALUE) 
public void postCreditCard(@RequestBody CreditCard creditCard) {
    // process data...
}

【讨论】:

  • 谢谢@Bart,我会试试这个。我刚刚搜索了“HttpMessageConverter”,看来我必须在 Spring 中实现很多才能看到这个调用正在执行。
  • 这不是真的。只需将 Jackson 2+ 添加到类路径,MappingJackson2HttpMessageConverter 就会自动添加到 RequestMappingHandlerAdapter。再简单不过了。
  • 感谢@Bart,它有效!我也参考stackoverflow
猜你喜欢
  • 2019-12-22
  • 1970-01-01
  • 1970-01-01
  • 2020-12-20
  • 1970-01-01
  • 2018-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多