相关疑难解决方法(0)

Jackson将变量反序列化为Json String

我有一个这样的模型:

private String message;
private Integer errorCode;    
private String data;
Run Code Online (Sandbox Code Playgroud)

我从远程和消息中获取JSON字符串,errorCode变量获取正确的值.但是我不想反序列化到我的数据变量.我希望它是一个json字符串,如:

{"data": {"cat": "1.2.3.4", "ner": "80", "name": "pinta" }, "message" : "m", "errorCode" : 12}
Run Code Online (Sandbox Code Playgroud)

之后,我将反序列化它以反对自己.我怎样才能做到这一点?

PS:澄清问题:

我得到一个类似的Json字符串:

{"data":{"cat":"1.2.3.4","ner":"80","name":"pinta"},"message":"m","errorCode":12}

反序列化后,我的变量应具有以下值:

{"cat": "1.2.3.4", "ner": "80", "name": "pinta" }
Run Code Online (Sandbox Code Playgroud)

java json jackson deserialization

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

如何通过杰克逊传递原始JSON?

我们在Apache CXF和Jackson之上运行了一整套JAX-RS REST服务.我们使用JAXB注释来处理将POJO编组为JSON,效果很好.

但是,我们有一两个地方要返回原始JSON字符串(我们从Redis缓存中获取).

杰克逊总是将字符串用双引号括起来,并将其中的所有双引号都删掉,例如

@GET @Produces("application/json")
public Response getData() {

    String json = ...get from Redis...
    return Response.ok(json,"application/json").build() 
}
Run Code Online (Sandbox Code Playgroud)

给我们

"{\"test\":1}"
Run Code Online (Sandbox Code Playgroud)

代替

{"test":1}
Run Code Online (Sandbox Code Playgroud)

我尝试过多种方法,将RawSerializer(String.class)添加到Object映射器中,没有任何效果.唯一有效的是,如果我将媒体类型设置为普通字符串,绕过杰克逊,但是不好,因为我返回了错误的内容类型

return Response.ok(json,"text/plain").build() 
Run Code Online (Sandbox Code Playgroud)

工作,但很差(错误的内容类型,这搞砸了.Net WCF应用程序打电话给我们)

java json cxf jax-rs jackson

13
推荐指数
2
解决办法
6716
查看次数

Spring Data Rest - PATCH Postgres jsonb字段

简短版本是:如何jsonb使用Spring Data Rest PATCH方法修补Postgres 字段中包含的JSON对象?

这是长版本,请考虑以下实体:

@Entity
@Table(name = "examples")
public class Example {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    private String jsonobject;

    @JsonRawValue
    public String getJsonobject() {
        return jsonobject == null ? null : jsonobject;
    }

    public void setJsonobject(JsonNode jsonobject) {
        this.jsonobject = jsonobject == null ? null : jsonobject.toString();
    }
}
Run Code Online (Sandbox Code Playgroud)

jsonobject是Postgres类型jsonb.这些getter/setter是为这里提到的Spring Data Rest序列化/反序列化它的方法.我们还尝试给该字段提供自己的类型,如这些答案中所述.

我们的目标是使用Spring Data Rest修补此字段包含的JSON对象.

例如:

GET /examples/1
{
    "id": 1,
    "jsonobject": {
         "foo": {"bar": …
Run Code Online (Sandbox Code Playgroud)

postgresql spring spring-data-rest json-patch jsonb

8
推荐指数
1
解决办法
1644
查看次数

JAXB/Jersey - JSONObject作为XmlElement

我正在使用Jersey(1.9.1)并将JAXB用于我的对象,并尝试添加一个简单的JSON对象字段,理想情况下是Jackson的JsonNode类型,但我也可以使用jettison的JSONObject(甚至是GSON的JsonObject)/JsonElement)

原因是因为我想允许发送'自由格式'json(作为我们示例中的obj元素),以及同一对象上的其他元素(使用JAXB注释)

我的目标:

import org.codehaus.jettison.json.JSONObject;

@XmlRootElement(name="moo")
@XmlAccessorType(XmlAccessType.FIELD)

public class Moo {

    @XmlElement
    JSONObject obj;

    ...
}
Run Code Online (Sandbox Code Playgroud)

我的资源:

@Path("/moo")
@POST
@Produces({MediaType.APPLICATION_JSON})
@Consumes({MediaType.APPLICATION_JSON})
public Response postMsg(Moo e) {
    System.out.println(e);

    return Response.status(200).entity(e).build();
}
Run Code Online (Sandbox Code Playgroud)

有效载荷:

{"obj": {"my": "custom", "object": 1, "here": [1, 2, 3] } }
Run Code Online (Sandbox Code Playgroud)

使用上述执行POST请求时 - obj是空的JSONObject.同样的事情发生了,当我试着用杰克逊JsonNode和GSON的JsonElement/ JsonObject.

但是,当我JSONObject用作方法的arg时,它能够解析它

@Path("/moo")
@POST
@Produces({MediaType.APPLICATION_JSON})
@Consumes({MediaType.APPLICATION_JSON})
public Response postMsg(JSONObject e) {
    System.out.println(e);

    return Response.status(200).entity(e).build();
}
Run Code Online (Sandbox Code Playgroud)

我认为这是因为Jersey使用自己com.sun.jersey.json.impl.provider.entity.JSONObjectProvider的编组,而JAXB使用自己的marshller.

有没有办法解决这个问题,同时仍然使用JAXB的注释(对于其他领域)?我尝试XmlAdapter使用自定义(使用@XmlJavaTypeAdapter注释)而没有任何成功(因为我得到的对象ValueType是一个DOM元素) …

java json jaxb jersey

8
推荐指数
1
解决办法
1307
查看次数