标签: jax-rs

从post请求中读取JAX-RS客户端中的响应主体

在移动应用程序和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()吗?

java json web-services cxf jax-rs

63
推荐指数
3
解决办法
12万
查看次数

找不到媒体类型= application/json的MessageBodyWriter

我在使用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)

java rest jax-rs jersey

63
推荐指数
7
解决办法
10万
查看次数

文件上传以及Jersey restful Web服务中的其他对象

我想通过上传图像和员工数据来在系统中创建员工信息.我能够使用球衣进行不同的休息呼叫.但我希望在一次休息电话中实现.我提供下面的结构.请帮我解决这方面的问题.

@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)

但是我可以通过进行两次不同的调用来实现,但我希望在一次休息调用中实现,这样我就可以接收文件以及员工的实际数据.

请求您在这方面提供帮助.

java multipartform-data jax-rs jersey postman

61
推荐指数
1
解决办法
9万
查看次数

使用JAX-RS保持干爽

我正在尝试最小化许多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)

跨资源的共用部位fooquux@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)

java jax-rs jersey

60
推荐指数
2
解决办法
1万
查看次数

找不到Java类的消息正文编写器

我是新手使用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)

java rest jax-rs

55
推荐指数
4
解决办法
8万
查看次数

如何自定义JAXB对象列表到JSON的序列化?

我正在使用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)

serialization json jax-rs jaxb jersey

54
推荐指数
2
解决办法
5万
查看次数

Jersey 2中的ResourceConfig类究竟是什么?

我看过很多以类似的东西开头的泽西教程

@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 jersey jersey-2.0

53
推荐指数
1
解决办法
3万
查看次数

如何使用JAX-RS设置charset?

如何使用JAX-RS设置charset?我已经尝试@Produces("text/html; charset=UTF-8")但是被忽略了,只有text/htmlHTTP头发送.我想在MessageBodyWriter中设置charset,但不希望通过我自己的反射分析@Produces注释来提取媒体类型.

java jax-rs character-encoding java-ee

51
推荐指数
4
解决办法
7万
查看次数

JAX-RS框架

我一直在使用JAX-RS参考实现(Jersey).我知道至少有两个其他框架(Restlet和Apache CXF).

我的问题是:有没有人在这些框架之间进行一些比较,如果是,你会推荐哪个框架,为什么?

java rest jax-rs

50
推荐指数
6
解决办法
4万
查看次数

如何在Jersey GET请求中将多个查询参数映射到bean的字段?

服务类具有@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)

你会怎么做?这甚至可能吗?

java jax-rs jersey

50
推荐指数
4
解决办法
7万
查看次数