在移动应用程序和Web服务之间使用某种代理,我们对发出帖子请求时的响应感到困惑.我们收到状态为200的回复:好的.但我们找不到/提取JSON响应体.
Client client = ClientBuilder.newClient();
WebTarget webTarget = client.target(WEBSERVICE_BASE_LOCATION + "mobileDevices?operatorCode=KPNSCP");
String jsonString = "{\"osVersion\":\"4.1\",\"apiLevel\":16,\"devicePlatform\":\"ANDROID\"}";
Builder builder = webTarget.request();
Response response = builder.post(Entity.json(jsonString));
Run Code Online (Sandbox Code Playgroud)
我们正在使用JAX-RS.有人可以提供一些提示String从服务器响应中提取JSON body()吗?
我在使用JSON作为JAX-RS服务时遇到了问题.
下面我添加了我的代码.
这是我的服务类:
//Sets the path to base URL + /hello
@Path("/hello")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class Hello {
@GET
@Produces("application/json")
public Student getStudent() {
Student s = new Student();
s.first_name = "Test First Name !!!";
s.last_name = "Test Last Name!!!";
return s;
}
Run Code Online (Sandbox Code Playgroud)
Student 我想从服务中获得的课程:
@XmlRootElement
public class Student implements Serializable {
public String first_name;
public String last_name;
public String getFirst_name() {
return first_name;
}
public void setFirst_name(String first_name) {
this.first_name = first_name;
}
public String getLast_name() {
return last_name; …Run Code Online (Sandbox Code Playgroud) 我想通过上传图像和员工数据来在系统中创建员工信息.我能够使用球衣进行不同的休息呼叫.但我希望在一次休息电话中实现.我提供下面的结构.请帮我解决这方面的问题.
@POST
@Path("/upload2")
@Consumes({MediaType.MULTIPART_FORM_DATA,MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response uploadFileWithData(
@FormDataParam("file") InputStream fileInputStream,
@FormDataParam("file") FormDataContentDisposition contentDispositionHeader,
Employee emp) {
//..... business login
}
Run Code Online (Sandbox Code Playgroud)
每当我想要做的时候,我都会在Chrome邮递员中出错.我的Employee json的简单结构如下所示.
{
"Name": "John",
"Age": 23,
"Email": "john@gmail.com",
"Adrs": {
"DoorNo": "12-A",
"Street": "Street-11",
"City": "Bangalore",
"Country": "Karnataka"
}
}
Run Code Online (Sandbox Code Playgroud)
但是我可以通过进行两次不同的调用来实现,但我希望在一次休息调用中实现,这样我就可以接收文件以及员工的实际数据.
请求您在这方面提供帮助.
我正在尝试最小化许多JAX-RS资源处理程序的重复代码,所有这些都需要一些相同的路径和查询参数.每个资源的基本URL模板如下所示:
/{id}/resourceName
Run Code Online (Sandbox Code Playgroud)
每个资源都有多个子资源:
/{id}/resourceName/subresourceName
Run Code Online (Sandbox Code Playgroud)
因此,资源/子资源路径(包括查询参数)可能看起来像
/12345/foo/bar?xyz=0
/12345/foo/baz?xyz=0
/12345/quux/abc?xyz=0
/12345/quux/def?xyz=0
Run Code Online (Sandbox Code Playgroud)
跨资源的共用部位foo和quux是@PathParam("id")和@QueryParam("xyz").我可以像这样实现资源类:
// FooService.java
@Path("/{id}/foo")
public class FooService
{
@PathParam("id") String id;
@QueryParam("xyz") String xyz;
@GET @Path("bar")
public Response getBar() { /* snip */ }
@GET @Path("baz")
public Response getBaz() { /* snip */ }
}
Run Code Online (Sandbox Code Playgroud)
// QuuxService.java
@Path("/{id}/quux")
public class QuxxService
{
@PathParam("id") String id;
@QueryParam("xyz") String xyz;
@GET @Path("abc")
public Response getAbc() { /* snip */ }
@GET @Path("def")
public …Run Code Online (Sandbox Code Playgroud) 我是新手使用JAX-RS并编写了一个输出json对象的示例应用程序.但我得到一个例外.这是我的代码:
@Path("/hello")
public class HelloWorldService {
@GET
@Path("/query/{artist_id}")
@Produces("application/json")
public Data getMsg(@PathParam("artist_id") int artist_id,
@QueryParam("from") int from,
@QueryParam("to") int to) {
Data d=new Data();
d.setName("Mateen");
d.setRoll(77);
return d;
}
Run Code Online (Sandbox Code Playgroud)
}
我的数据只是一个POJO类:
@XmlRootElement
public class Data {
private int roll;
private String name;
public int getRoll() {
return roll;
}
public void setRoll(int roll) {
this.roll = roll;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Run Code Online (Sandbox Code Playgroud)
我得到一个例外:
javax.ws.rs.WebApplicationException:
com.sun.jersey.api.MessageException:
A message …Run Code Online (Sandbox Code Playgroud) 我正在使用Jersey为服务器组件创建REST Web服务.
我想在列表中序列化的JAXB注释对象如下所示:
@XmlRootElement(name = "distribution")
@XmlType(name = "tDistribution", propOrder = {
"id", "name"
})
public class XMLDistribution {
private String id;
private String name;
// no-args constructor, getters, setters, etc
}
Run Code Online (Sandbox Code Playgroud)
我有一个REST资源来检索一个看起来像这样的发行版:
@Path("/distribution/{id: [1-9][0-9]*}")
public class RESTDistribution {
@GET
@Produces("application/json")
public XMLDistribution retrieve(@PathParam("id") String id) {
return retrieveDistribution(Long.parseLong(id));
}
// business logic (retrieveDistribution(long))
}
Run Code Online (Sandbox Code Playgroud)
我还有一个REST资源来检索所有发行版的列表,如下所示:
@Path("/distributions")
public class RESTDistributions {
@GET
@Produces("application/json")
public List<XMLDistribution> retrieveAll() {
return retrieveDistributions();
}
// business logic (retrieveDistributions())
}
Run Code Online (Sandbox Code Playgroud)
我使用ContextResolver来自定义JAXB序列化,当前配置如下:
@Provider
@Produces("application/json")
public class …Run Code Online (Sandbox Code Playgroud) 我看过很多以类似的东西开头的泽西教程
@ApplicationPath("services")
public class JerseyApplication extends ResourceConfig {
public JerseyApplication() {
packages("com.abc.jersey.services");
}
}
Run Code Online (Sandbox Code Playgroud)
没有解释这个ResourceConfig类究竟是什么.那么我在哪里可以找到它的文档,用法等?谷歌搜索"泽西资源配置"不会产生任何官方文档.
关于这个课程及其用法的一些问题是:
ResourceConfig?ResourceConfig某个地方的子类以便可以找到它或者它是否被泽西自动检测到?ResourceConfig?ResourceConfig是和web.xml文件一样吗?如果是这样的话,如果我在我的项目中同时出现这种情 其中一个优先于另一个吗?如何使用JAX-RS设置charset?我已经尝试@Produces("text/html; charset=UTF-8")但是被忽略了,只有text/htmlHTTP头发送.我想在MessageBodyWriter中设置charset,但不希望通过我自己的反射分析@Produces注释来提取媒体类型.
我一直在使用JAX-RS参考实现(Jersey).我知道至少有两个其他框架(Restlet和Apache CXF).
我的问题是:有没有人在这些框架之间进行一些比较,如果是,你会推荐哪个框架,为什么?
服务类具有@GET接受多个参数的操作.这些参数作为查询参数传递给@GET服务调用.
@GET
@Path("find")
@Produces(MediaType.APPLICATION_XML)
public FindResponse find(@QueryParam("prop1") String prop1,
@QueryParam("prop2") String prop2,
@QueryParam("prop3") String prop3,
@QueryParam("prop4") String prop4, ...)
Run Code Online (Sandbox Code Playgroud)
这些参数的列表正在增长,因此我想将它们放入包含所有这些参数的单个bean中.
@GET
@Path("find")
@Produces(MediaType.APPLICATION_XML)
public FindResponse find(ParameterBean paramBean)
{
String prop1 = paramBean.getProp1();
String prop2 = paramBean.getProp2();
String prop3 = paramBean.getProp3();
String prop4 = paramBean.getProp4();
}
Run Code Online (Sandbox Code Playgroud)
你会怎么做?这甚至可能吗?