Post json 到外部 api
Post json to external api
我刚开始使用 Drropwizard 并希望将 json 数据提交到 POST 方法。
@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public String newPost(){
Client client = ClientBuilder.newClient();
String input = "{"version":"v1","buildTime":"2017-06-06"}";
//call external api with json_input
return result;
}
所以我想post将输入(原始json)输入到外部api。
使用 client.target("https://path_to_external_api").request().get(String.class);
适用于 GET 方法但不确定如何实施 POST
任何 comments/suggestions 不胜感激。
我更喜欢在使用 MediaType.APPLICATION_JSON
时定义模型。
样本
InputPOJO {
String version;
Long buildTime;
// ...getters and setters here
}
然后使用 Response
实体到 return 响应对象作为(为清楚起见包括导入)-
import javax.ws.rs.POST;
import javax.ws.rs.Produces;
import javax.ws.rs.Consumes;
import javax.ws.rs.Path;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@Path("/xyz")
public Response newPost(InputPOJO inputPOJO) {
String output = "Success!" + inputPOJO.getVersion();
return Response.status(200).entity(output).build();
}
使用由@nullpointer 定义的服务修改:
@Path("/testpostjson")
public class MyPostResource {
public MyPostResource() {
}
@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Response newPost(InputPOJO inputPOJO) {
String output = "Success! " + inputPOJO.getVersion() +" "+ inputPOJO.getBuildTime();
return Response.status(200).entity(output).build();
}
}
我创建了您可以使用的客户端:
@Produces(MediaType.TEXT_PLAIN)
@Path("/client")
public class Client2Post {
private Client client;
public Client2Post(Client client) {
this.client = client;
}
@Path("/test")
@POST
@Consumes(MediaType.APPLICATION_JSON)
public String newPost(){
String input = "{\"version\":\"v1\",\"buildTime\":\"2017-06-06\"}";
//call external api with json_input
final Invocation.Builder request = client.target("http://localhost:8080/testpostjson").request();
final Response result = request.post(Entity.entity(input, MediaType.APPLICATION_JSON_TYPE));
return result.readEntity(String.class);
}
}
另外记得在配置文件中配置球衣客户端:
@Valid
@NotNull
private JerseyClientConfiguration jerseyClient = new JerseyClientConfiguration();
@JsonProperty("jerseyClient")
public JerseyClientConfiguration getJerseyClientConfiguration() {
return jerseyClient;
}
并在您的应用程序文件中注册创建的资源。
作为参考,我最终使用了这样的 Jersey 客户端。
进口清单:
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.core.Response;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
在我的资源中使用 @POST 方法中的客户端:
Client client = ClientBuilder.newClient();
WebTarget tar = client.target("https://path_to_external_api");
Response res = tar.request().accept(MediaType.APPLICATION_JSON)
.post(Entity.entity(json_input, MediaType.APPLICATION_JSON), Response.class);
return res;
我刚开始使用 Drropwizard 并希望将 json 数据提交到 POST 方法。
@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public String newPost(){
Client client = ClientBuilder.newClient();
String input = "{"version":"v1","buildTime":"2017-06-06"}";
//call external api with json_input
return result;
}
所以我想post将输入(原始json)输入到外部api。
使用 client.target("https://path_to_external_api").request().get(String.class);
适用于 GET 方法但不确定如何实施 POST
任何 comments/suggestions 不胜感激。
我更喜欢在使用 MediaType.APPLICATION_JSON
时定义模型。
样本
InputPOJO {
String version;
Long buildTime;
// ...getters and setters here
}
然后使用 Response
实体到 return 响应对象作为(为清楚起见包括导入)-
import javax.ws.rs.POST;
import javax.ws.rs.Produces;
import javax.ws.rs.Consumes;
import javax.ws.rs.Path;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@Path("/xyz")
public Response newPost(InputPOJO inputPOJO) {
String output = "Success!" + inputPOJO.getVersion();
return Response.status(200).entity(output).build();
}
使用由@nullpointer 定义的服务修改:
@Path("/testpostjson")
public class MyPostResource {
public MyPostResource() {
}
@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Response newPost(InputPOJO inputPOJO) {
String output = "Success! " + inputPOJO.getVersion() +" "+ inputPOJO.getBuildTime();
return Response.status(200).entity(output).build();
}
}
我创建了您可以使用的客户端:
@Produces(MediaType.TEXT_PLAIN)
@Path("/client")
public class Client2Post {
private Client client;
public Client2Post(Client client) {
this.client = client;
}
@Path("/test")
@POST
@Consumes(MediaType.APPLICATION_JSON)
public String newPost(){
String input = "{\"version\":\"v1\",\"buildTime\":\"2017-06-06\"}";
//call external api with json_input
final Invocation.Builder request = client.target("http://localhost:8080/testpostjson").request();
final Response result = request.post(Entity.entity(input, MediaType.APPLICATION_JSON_TYPE));
return result.readEntity(String.class);
}
}
另外记得在配置文件中配置球衣客户端:
@Valid
@NotNull
private JerseyClientConfiguration jerseyClient = new JerseyClientConfiguration();
@JsonProperty("jerseyClient")
public JerseyClientConfiguration getJerseyClientConfiguration() {
return jerseyClient;
}
并在您的应用程序文件中注册创建的资源。
作为参考,我最终使用了这样的 Jersey 客户端。
进口清单:
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.core.Response;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
在我的资源中使用 @POST 方法中的客户端:
Client client = ClientBuilder.newClient();
WebTarget tar = client.target("https://path_to_external_api");
Response res = tar.request().accept(MediaType.APPLICATION_JSON)
.post(Entity.entity(json_input, MediaType.APPLICATION_JSON), Response.class);
return res;