如何使控制器使用HashMap获取URL?

时间:2019-10-03 04:15:36

标签: java spring-boot spring-mvc controller

我需要在Spring Boot 2.0中创建一个控制器,以正确获取如下所示的URL:

https://localhost:8443/my_generate_signature?data%5Btimestamp%5D=1570074358&data%5Bsource%5D=uw

AJAX申请正在调用此URL:

<script type="text/javascript">
var generateSignature = 
function(callback, params_to_sign){
$.ajax({
url     : "/my_generate_signature",
type    : "GET",
dataType: "text",
data    : { data: params_to_sign},
complete: function() {console.log("complete")},
success : function(signature, textStatus, xhr) { callback(signature); },
error   : function(xhr, status, error) { console.log(xhr, status, error); }
});
}
</script>
<script type="text/javascript">  
  $('#upload_widget_opener').cloudinary_upload_widget({ 
    cloudName: cloudName, apiKey: api_key,
    cropping: true, uploadSignature: generateSignature}, (error, result) => { });
</script>

作为参考,我正在尝试实现这一点:

https://cloudinary.com/documentation/upload_widget#create_upload_widget_methods

我已经尝试过这样的控制器,但是我得到了HttpStatus 400:

@RequestMapping(value="/my_generate_signature")
@ResponseBody
public String generateSignature(@RequestParam(value="params_to_sign", required=true) Map<String, Object> paramsToSign) {

return 'test';
}

2 个答案:

答案 0 :(得分:1)

您还可以使用发布请求和使用请求正文。 @PostMapping @ResponseBody 公共字符串generateSignature(@RequestBody Map> paramsToSign){     返回“ ....”; }

在获取请求的情况下,可以使用@GetMapping和@RequestParam注释。

答案 1 :(得分:0)

如果要将所有请求参数保存到Map中,则无需为value标识@RequestParam。只需按照以下方式修改方法generateSignature

public String generateSignature(@RequestParam Map<String, Object> paramsToSign) {
    return 'test';
}