通过 SpringBoot 调用 REST api 时 POST 不支持异常
Posted
技术标签:
【中文标题】通过 SpringBoot 调用 REST api 时 POST 不支持异常【英文标题】:POST not supported exception while invoking REST api via SpringBoot 【发布时间】:2016-06-17 03:47:17 【问题描述】:我在 SpringBoot 应用程序中定义了一个 REST API,我正在尝试使用部署在 Tomcat 8 服务器上的不同应用程序通过 POST 访问它。从其他应用程序执行 POST 后,我在 SpringBoot 日志中收到以下错误: 不支持请求方法“POST”。
这是我的 Rest Controller 类:
@Controller
public class RestApiController
@RequestMapping(value="/cancel", method=RequestMethod.GET)
public @ResponseBody String CancelJobEndPointInfo()
return "A job can be cancelled by POSTing to this URL";
@RequestMapping(value="/cancel", method=RequestMethod.POST)
public @ResponseBody DataPost CancelJobEndPoint(@RequestParam("username") String name,
@RequestParam(name = "passPhrase", defaultValue = "null") String passPhrase,
@RequestParam("jobnumber") String jobNumber, @RequestParam("file") MultipartFile file)
UserDetails userObject = new UserDetails();
CancelJob job = new CancelJob();
DataPost dpc = new DataPost();
if (!file.isEmpty())
try
/*
* Write private key
*/
byte[] ppkBytes = file.getBytes();
BufferedOutputStream ppkStream =
new BufferedOutputStream(new FileOutputStream(new File(file.getOriginalFilename())));
ppkStream.write(ppkBytes);
ppkStream.close();
userObject.setKeyPath(file.getOriginalFilename());
userObject.setUserName(name);
userObject.setPassphrase(passPhrase);
job.getCancelJob(userObject, jobNumber);
dpc.setMessage("Job:" + jobNumber + " Cancelled successfully");
return dpc;
catch (IOException e)
dpc.setMessage("Could not cancel the job:" + jobNumber + " ERROR => " + e.getMessage());
return dpc;
// return "Could not cancel the job:" + jobNumber + " ERROR => " + e.getMessage();
catch (JSchException e)
// return "Could not cancel the job:" + jobNumber + " ERROR => " + e.getMessage();
dpc.setMessage("Could not cancel the job:" + jobNumber + " ERROR => " + e.getMessage());
return dpc;
else
dpc.setMessage("Private Key file for user: " + name + " is empty");
return dpc;
// return "Private Key file for user: " + name + " is empty";
我可以看到 GET 请求正在成功通过,但我不确定 PUT 请求有什么问题。 此外,我可以通过使用具有 REST 方法的应用程序中的 html 文件通过 POST 调用 API。 我在尝试从不同的应用程序调用它时遇到了这个问题。 以下是我使用的表格:
<form action="http://localhost:8080/cancel" enctype="multipart/form-data"
method="post" accept-charset="utf-8" id="jobCancelForm"
name="job">
<h4 class="section-heading">User Details:</h4>
<fieldset class="form-group">
<label for="UserID">User Name</label> <input type="username"
class="form-control" id="canceluser"
placeholder="Enter SSH User ID" name="username">
</fieldset>
<fieldset class="form-group">
<label for="passPhrase">PassPhrase :</label> <input
type="password" class="form-control" id="cancelpass"
placeholder="Private Key PassPhrase" name="passPhrase">
</fieldset>
<fieldset class="form-group">
<label for="PrivateKeyFileInput">Private Key File</label> <input
type="file" class="form-control-file"
id="cancelPrivateKeyFileInput" name="cFile"> <small
class="text-muted">Select the pre-configured private
key file to be used for SSH authentication.</small>
</fieldset>
<a role="separator" class="divider"></a>
<hr>
<h4 class="section-heading">Job Details:</h4>
<fieldset class="form-group">
<label for="jobID">Job ID :</label> <input type="number"
class="form-control" id="canceljobID"
placeholder="Enter the job ID Ex: 1242254" name="jobNumber">
</fieldset>
<button type="submit" class="btn btn-primary"
id="jobMonitorButton">Cancel Job</button>
</form>
<a role="separator" class="divider"></a>
<!-- response div -->
<div style="word-wrap: break-word;" id="cancelResponse"></div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default"
data-dismiss="modal" id="jobCancelFormCloseButton">Close</button>
</div>
</div>
请指点一下?
【问题讨论】:
您可以发布您的请求吗? 很抱歉,您能告诉我如何获取请求 XML 吗?如果有帮助,我添加了用于调用 API 的表单 html。 @seriousgeek 你找到这个线程的解决方案了吗?看来我也面临同样的问题 【参考方案1】:在我看来here提供的解决方案是同样的问题
在控制器的类上添加@RequestMapping("YOUR-CONTEXT-VALUE") 并从@RestController 注释中删除值。
【讨论】:
以上是关于通过 SpringBoot 调用 REST api 时 POST 不支持异常的主要内容,如果未能解决你的问题,请参考以下文章
仅在 REST API 调用上的 Spring Boot 404
使用 kubernetes 集群进行动态 rest api 调用的 Springboot 应用程序
Springboot和Spring Security中认证成功后如何授权Rest API调用
SpringBoot 项目配置 Swagger 接口api 搭建 REST