如何使用 ANGULAR 5 的 ARC 扩展发送 POST 请求以测试 api Rest?
Posted
技术标签:
【中文标题】如何使用 ANGULAR 5 的 ARC 扩展发送 POST 请求以测试 api Rest?【英文标题】:How to send POST request to test the api Rest using ARC extention or ANGULAR5? 【发布时间】:2018-10-24 14:44:48 【问题描述】:我正在尝试在 spring boot 中测试 api rest,所以我使用 ARC 扩展来发送 POST 请求,但我想我做错了。
身份验证后,我得到了用于测试 api rest 的令牌。
这是spring boot中的方法:
@RequestMapping(value="/saveProjectToClient",method=RequestMethod.POST)
public boolean saveProjectToClient(@RequestBody DTO dto)
System.out.println("Person id : "+dto.getIdPerson());
System.out.println("Project id : "+dto.getIdProject());
return true;
这个方法除了显示id什么都没做,我会在它工作后改变它..
对于 ARC 扩展:
在正文中发送参数:
如您所见,我收到一个错误:
"timestamp": 1526330389396,
"status": 400,
"error": "Bad Request",
"exception": "org.springframework.http.converter.HttpMessageNotReadableException",
"message": "JSON parse error: Can not deserialize instance of long out of START_OBJECT token; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of long out of START_OBJECT token at [Source: java.io.PushbackInputStream@1134a39; line: 1, column: 1]",
"path": "/saveProjectToClient"
有什么问题?我以不正确的方式使用发布请求?还是spring boot中的方法写得不好?
编辑
使用 HttpClient 的 Angular5 服务:
addProjToClient(idPerson:number,idProject:number)
if(this.authService.getToken()==null)
this.authService.loadToken();
return this.http.post(this.host+"/saveProjectToClient",
idPerson,
idProject,
, headers:new HttpHeaders('Authorization':this.authService.getToken()))
问题:现在当我尝试通过 angular5 服务调用此方法时,我没有得到任何结果,更没有错误,spring boot 中的方法无法访问。
【问题讨论】:
【参考方案1】:异常信息中明确说明了问题:
Can not deserialize instance of long out of START_OBJECT
Jackson 在您的 JSON 请求正文中找到起始 字符时无法反序列化 long。将 id 包装在如下模型中就足够了:
public class MyModel
private Long id; // use primitive type if, as I would think, id cannot be null
public void setId( Long id )
this.id = id;
public Long getId()
return id;
你显然必须告诉 Spring 使用自定义模型作为 @RequestBody
:
@RequestMapping( value = "/saveProjectToClient", method = RequestMethod.POST )
public boolean saveProjectToClient( @RequestBody MyModel model )
System.out.println( "ID: " + String.valueOf( model.getId() );
return true;
【讨论】:
你是绝对正确的,我用 2 个变量测试了这个,因为我需要两个,它使用弧扩展运行良好,但是现在当我移动到 angular 5 时它不起作用,我已经更新了帖子,如果你可以再次看到它。 我对 Angular 知之甚少,但据我所知,您在请求正文中发送了两个字段(idPerson
和 idProject
),没有任何关联的键。您也绝对必须检查字符串连接this.host + "/saveProjectToClient"
是否会导致调用正确的URL。另外,检查日志,那里不可能没有错误。
我现在检查过的网址没有问题,我也尝试过这样发送请求:idPerson:'idPerson',idProject:'idProject,也没有错误没有结果,这真的很难调试,因为我看不到任何错误或异常
您发布的 JSON 错误。无论哪种方式,发布一个不同的问题,因为我没有足够的空间在 cmets 中回答(如果它解决了您的问题,也将答案标记为已接受)。以上是关于如何使用 ANGULAR 5 的 ARC 扩展发送 POST 请求以测试 api Rest?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 POST 从 Angular 5 向 Spring 控制器发送多个 RequestParams
Angular 5 - 当用户关闭浏览器窗口时如何进行 API 调用?
Angular 7:发送 post 请求给出错误 405(不允许的方法)