我有一个简单的Spring Rest Controller和一些验证.我的理解是验证失败会抛出MethodArgumentNotValidException.但是,我的代码抛出了BindException.在调试消息中,我还看到应用程序返回null ModelAndView.
为什么Rest Controller会抛出BindException或返回null ModelAndView?
注意:我正在使用curl测试我的Web应用程序并进行HTTP POST
curl -X POST http://localhost:8080/tasks
Run Code Online (Sandbox Code Playgroud)
我故意省略"name"参数,这是一个标有@NotNull和@NotBlank注释的必填字段.
我的控制器:
@RestController
public class TasksController {
private static Logger logger = Logger.getLogger(TasksController.class);
@Autowired
private MessageSource messageSource;
@Autowired
private Validator validator;
@InitBinder
protected void initBinder(WebDataBinder binder){
binder.setValidator(this.validator);
}
@RequestMapping(value = "/tasks", method = RequestMethod.POST)
public Task createTask(@Valid TasksCommand tasksCommand){
Task task = new Task();
task.setName(tasksCommand.getName());
task.setDue(tasksCommand.getDue());
task.setCategory(tasksCommand.getCategory());
return task;
}
}
Run Code Online (Sandbox Code Playgroud)
我的"命令"类(包含验证注释)
public class TasksCommand {
@NotBlank
@NotNull
private String name;
private Calendar due;
private String category; …Run Code Online (Sandbox Code Playgroud) bash中的以下函数会出现标题中提到的错误.当最终EOF不在行的开头时,通常会出现错误.
EOF是在开始,所以我看不出有什么问题.进一步在脚本(未显示)中还有其他here-docs,它们可以工作.
add_testuser()
{
kadmin -p admin -q addprinc test
cat <<EOF > ~/test.ldif
dn: cn=test,ou=groups,dc=${ARRAY[1]},dc=${ARRAY[2]}
cn: test
gidNumber: 20001
objectClass: top
objectClass: posixGroup
dn: uid=test,ou=people,dc=${ARRAY[1]},dc=${ARRAY[2]}
uid: test
uidNumber: 20001
gidNumber: 20001
cn: First_name
sn: Last_name
objectClass: top
objectClass: person
objectClass: posixAccount
objectClass: shadowAccount
loginShell: /bin/bash
homeDirectory: /home/test
userPassword: {CRYPT}*
EOF
ldapadd -Qf ~/test.ldif
kdestroy; kinit test
klist
ldapwhoami
}
Run Code Online (Sandbox Code Playgroud) 我是新手,我有一个项目需要向用户发送每日提醒。我看到您可以使用 cron 作业来做到这一点。但是,我需要调用具有每日提醒功能的 API。此 API 是外部 API。我怎么做?
UPATE: 我需要调用 API,然后获取响应并每天向用户发送电子邮件。
我在 StackOverflow 的答案中找到了我想要如何将数据发布到另一个网址的信息。
但是,我希望在我的 php Web 脚本中执行此命令,而不是从终端执行。从查看curl文档来看,我认为它应该是这样的:
<?php
$url = "http://myurl.com";
$myjson = "{\"column1\":\"1\",\"colum2\":\"2\",\"column3\":\"3\",\"column4\":\"4\",\"column5\":\"5\",\"column6\":\"6\"}";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $myjson);
curl_close($ch);
?>
Run Code Online (Sandbox Code Playgroud)
最好的方法是什么?
当前正在运行的终端命令是:
curl -X POST -H "Content-Type: application/json" -d '{"column1":"1","colum2":"2","column3":"3","column4":"4","column5":"5","column6":"6"}' https://myurl.com
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用curl将一个来自powershell脚本的JSON字符串传递给build.phonegap.com api.
根据phonegap的论坛,当在Windows机器上运行时,JSON数据必须格式化为:
curl.exe -ku user@email:mypass -X PUT -d "data={\"password\":"\keypass\"}" https://build.phonegap.com/api/v1/key
Run Code Online (Sandbox Code Playgroud)
实际上,从命令行调用时,这确实运行良好.
但是,当我尝试在powershell脚本中调用它时,双引号似乎被剥离.
到目前为止,我尝试过:
curl.exe -ku user@email:mypass -X PUT -d '"data={\"password\":\"keypass\"}"' https://build.phonegap.com/api/v1/key
curl.exe -ku user@email:mypass -X PUT -d '"data={"password":"keypass"}"' https://build.phonegap.com/api/v1/key
curl.exe -ku user@email:mypass -X PUT -d '\"data={\\\"password\\\":\\\"keypass\\\"}\"' https://build.phonegap.com/api/v1/key
curl.exe -ku user@email:mypass -X PUT -d "`"data={\`"password\`":\`"build*2014`\`"}`"" https://build.phonegap.com/api/v1/key
知道怎么做到这一点?
谢谢你的时间,科恩
我目前正在尝试使用Powershell和Curl在我们的Zendesk票务系统中自动创建新用户.我遇到的问题是curl json体被单引号括起来,我需要引用该体内的变量.这是我有的:
$Firstname = "Test"
$Lastname = "User"
$email= 'user@test.org'
curl.exe https://mydomain.zendesk.com/api/v2/users.json -H "Content-Type: application/json" -X POST -d '{\"user\": {\"name\": \"$Firstname $Lastname\", \"email\": \"$email\"}}' -v -u myuser:mypass
Run Code Online (Sandbox Code Playgroud)
如果我在json中键入常规文本值,这可以正常工作,但是如何让它识别变量$ Firstname,$ Lastname和$ email?
如果在何时/何时不使用上述将信息传递给REST调用的方法,我一直试图找到答案.
我一直在寻找各地,但每个帖子只讨论两种列出的方法之间的差异,或3,而不是所有4.
我正在尝试使用 Github 的 API 创建一个版本。
我的请求在 Postman 中工作正常,但无论我尝试什么,curl 总是失败,包括如果我只是使用 Postman 将 Postman 请求转换为curl。
这是我的 Postman POST 请求的正文:
{
"tag_name": "4.2.0",
"target_commitish": "master",
"name": "4.2.0",
"body": "test"
}
Run Code Online (Sandbox Code Playgroud)
我已经包含了一个“Basic”类型的授权标头,我在其中输入我的用户名和为此目的创建的令牌。
我正在执行针对 的请求https://api.github.com/repos/<myUsername>/<myRepo>/releases。
正如我所说 - 它工作正常,但是当我将其转换为 curl 时,我收到错误“解析 JSON 时出现问题”。
翻译后的curl命令是:
curl --location --request POST 'https://api.github.com/repos/<myUsername>/<myRepo>/releases' \
--header 'Authorization: Basic <someHashOrSomething>' \
--header 'Content-Type: application/json' \
--data-raw '{
"tag_name": "4.2.0",
"target_commitish": "master",
"name": "4.2.0",
"body": "test"
}'
Run Code Online (Sandbox Code Playgroud)
我将其重新格式化curl --location --request POST 'https://api.github.com/repos/<myUsername>/<myRepo>/releases' --header 'Authorization: Basic <someHashOrSomething>' --header 'Content-Type: application/json' --data-raw …
curl ×4
java ×2
json ×2
php ×2
powershell ×2
rest ×2
spring ×2
bash ×1
cron ×1
eof ×1
github ×1
github-api ×1
heredoc ×1
iiif ×1
post ×1
spring-boot ×1
validation ×1