gpt4 book ai didi

java - 如何在 java 中进行 rest api 调用并映射响应对象?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:08:10 26 4
gpt4 key购买 nike

我目前正在开发我的第一个 java 程序,它将调用 rest api(jira rest api,更具体地说)。

所以,如果我转到我的浏览器并输入 url ="http://my-jira-domain/rest/api/latest/search?jql=assignee=currentuser()&fields=worklog "

我收到一个包含当前用户所有工作日志的响应 (json)。但我的问题是,我如何使用我的 java 程序来做到这一点?比如,连接到这个 url,获取响应并将其存储在一个对象中?

我使用 spring,有人知道如何使用它。提前谢谢大家。

我补充一下,我的代码在这里:

RestTemplate restTemplate = new RestTemplate();
String url;
url = http://my-jira-domain/rest/api/latest/search/jql=assignee=currentuser()&fields=worklog
jiraResponse = restTemplate.getForObject(url,JiraWorklogResponse.class);

JiraWorkLogResponse 是一个简单的类,只有一些属性。

编辑,我的整个类(class):

@Controller
@RequestMapping("/jira/worklogs")
public class JiraWorkLog {

private static final Logger logger = Logger.getLogger(JiraWorkLog.class.getName() );
@RequestMapping(path = "/get", method = RequestMethod.GET, produces = "application/json")

public ResponseEntity getWorkLog() {


RestTemplate restTemplate = new RestTemplate();
String url;
JiraProperties jiraProperties = null;


url = "http://my-jira-domain/rest/api/latest/search?jql=assignee=currentuser()&fields=worklog";

ResponseEntity<JiraWorklogResponse> jiraResponse;
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders = this.createHeaders();


try {
jiraResponse = restTemplate.exchange(url, HttpMethod.GET, new HttpEntity<Object>(httpHeaders),JiraWorklogResponse.class);



}catch (Exception e){
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage());
}

return ResponseEntity.status(HttpStatus.OK).body(jiraResponse);

}


private HttpHeaders createHeaders(){
HttpHeaders headers = new HttpHeaders(){
{
set("Authorization", "Basic something");
}
};
return headers;
}

此代码返回:org.springframework.http.converter.HttpMessageNotWritableException

谁知道为什么?

最佳答案

您只需要 http 客户端。例如,它可能是 RestTemplate(与 spring、easy client 相关)或更高级且对我 Retrofit(或您最喜欢的客户端)更具可读性。

使用此客户端,您可以执行这样的请求以获取 JSON:

 RestTemplate coolRestTemplate = new RestTemplate();
String url = "http://host/user/";
ResponseEntity<String> response
= restTemplate.getForEntity(userResourceUrl + "/userId", String.class);

在 Java 中映射 JSON 和对象/集合的一般推荐方法是 Jackson/Gson 库。相反,他们可以快速检查您可以:

  1. 定义 POJO 对象:

    public class User implements Serializable {
    private String name;
    private String surname;
    // standard getters and setters
    }
  2. 使用 RestTemplate 的 getForObject() 方法。

    User user = restTemplate.getForObject(userResourceUrl + "/userId", User.class);

要获得有关使用 RestTemplate 和 Jackson 的基本知识,我向您推荐来自 baeldung 的非常棒的文章:

http://www.baeldung.com/rest-template

http://www.baeldung.com/jackson-object-mapper-tutorial

关于java - 如何在 java 中进行 rest api 调用并映射响应对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50876331/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com