【问题标题】:How to retreive Id from the API如何从 API 中检索 ID
【发布时间】:2021-11-13 10:48:00
【问题描述】:

我正在使用 java spring。所以在数据库内部,我有一个包含页面 ID 列和内容列的内容表。在这个内容列中,有许多跟踪器 Id,保存为 ContentJSON。我正在尝试使用此 url 执行 GET API:localhost:8080/eHealth/api/user/mytracker/pageId?trackerId=2。但是,它显示了该特定 pageIds 下的 trackerIds 列表。

我的代码如下: //获取每个tracker数据

@SuppressWarnings("rawtypes")
    @GetMapping(value = "/mytracker/{pageId}/{trackerId}")
    public ResponseEntity<?> getTrackerContent(HttpServletRequest request, 
            @PathVariable String pageId, @PathVariable String trackerId) throws JsonParseException, JsonMappingException, IOException {
        ValidationResult validationResult = this.tokenValidator.validateUserIdentityFromRequest(request);
        if(validationResult != ValidationResult.VALID_USER) {
            return this.tokenValidator.httpResponseEntityWithTemplateMessages(validationResult);
        }
        User currentUser = this.tokenValidator.getUserFromToken(this.tokenValidator.resolveToken(request));
        UserContent trackerContent = this.portalService.getUserContent(currentUser, pageId, "tracker");
        HashMap unpackedTrackerContent = this.unpackTrackerData(trackerContent);
        HashMap<String, Object> trackers = new HashMap<String, Object>();
        trackers.put(pageId,unpackedTrackerContent);
        return ResponseEntity.ok(trackers);     
    }

任何帮助将不胜感激。谢谢

数据库里面的内容栏如下:

{"content":null,"UserContentJSON":"{\"trackerData\":[{\"trackerId\":\"1\",\"trackerDateTime\":\"05-07-2020T03:47:00.00Z\",\"trackerIntensity\":\"2\",\"trackerDuration\":\"1\"},{\"trackerId\":\"2\",\"trackerDateTime\":\"05-07-2020T03:47:00.00Z\",\"trackerIntensity\":\"2\",\"trackerDuration\":\"1\"},{\"trackerId\":\"3\",\"trackerDateTime\":\"05-07-2020T03:47:00.00Z\",\"trackerIntensity\":\"2\",\"trackerDuration\":\"1\"}]}","isNew":false,"ref":"tracker","programID":"HOPE_CVD_Copy","pageID":"physicalactivity","userID":"cvdtest"}

【问题讨论】:

    标签: java spring spring-mvc spring-data-jpa


    【解决方案1】:

    就像@Dirk 说你在URL 中犯了错误。

    你的URL应该是这样的,

    localhost:8080/eHealth/api/user/mytracker/{yourPageId}/{yourTrackerId}
    

    话虽如此,在您的实现中,我看不到变量@PathVariable String trackerId 在任何地方使用。您可能需要检查一下。

    【讨论】:

    • 你好,是的,你是对的。我不能在方法中使用 trackerId,因为我没有单独的列供跟踪器 ID 从数据库中检索。我想知道是否可以将内容列中的跟踪器 ID 作为 json 字符串检索?
    • @tracy 在您的数据库中提供示例示例 json 字符串。还要提到你的数据库是什么。
    • @tracy 我认为getUserContent 是您调用以从数据库中获取数据的方法。也需要改变它。因此,您还需要提供当前的实现方式
    • 请将这些内容附加到问题中。所以对大家都有帮助
    • 嗨@ray我把它移到了问题中:)
    【解决方案2】:

    “我正在尝试使用以下网址执行 GET API:localhost:8080/eHealth/api/user/mytracker/pageId?trackerId=2。但是,它显示了 trackerIds 列表在那个特定的 pageIds 下”

    控制器需要 2 个 @PathVariable 而不是 @RequestParam

    @GetMapping(value = "/mytracker/{pageId}/{trackerId}")
    public ResponseEntity<?> getTrackerContent(HttpServletRequest request, 
                @PathVariable String pageId, @PathVariable String trackerId) throws...{
            
    

    所以你应该发出这样的请求:localhost:8080/eHealth/api/user/mytracker/3/2 其中 3 是“pageId”,2 是“trackerId”

    【讨论】:

    • 嗨。我将其更改为这种格式,但仍然出现了跟踪器 ID 的整个列表。是不是因为没有tracker Id列而只存在于api中?
    猜你喜欢
    • 1970-01-01
    • 2021-10-24
    • 2012-07-25
    • 2021-01-06
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    • 2011-05-14
    • 2011-05-31
    相关资源
    最近更新 更多