如何使用 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 知之甚少,但据我所知,您在请求正文中发送了两个字段(idPersonidProject),没有任何关联的键。您也绝对必须检查字符串连接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(不允许的方法)

如何在 Angular 5 中使用 GET 方法使用 apollo graphql 查询

arc音频回传功能需要投影支持吗

如何在 iOS 4 上运行 iOS 5/ARC 项目