小编Nis*_*nth的帖子

杰克逊没有消耗JSON根元素

我正在使用JAX-RS + Jersey来使用Web服务请求,而Jackson则使用JSON数据来转换:

@Path("/")
public class JAXRSRestController {
    @Path("/jsonRequest")
    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    public Response submitJsonRequest(SampleObject sampleObject, @Context HttpHeaders headers)
    {
        Ack ack = new Ack();
        ack.setUniqueId(sampleObject.getId());
        ack.setType(sampleObject.getName());
        return Response.ok().entity(ack).build();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果请求采用以下格式,则不会消耗:

{
  "sampleObject": {
    "id": "12345",
    "name": "somename"
  }
}
Run Code Online (Sandbox Code Playgroud)

但如果请求采用以下格式,则会被使用:

{
    "id": "12345",
    "name": "somename"
}
Run Code Online (Sandbox Code Playgroud)

如何让控制器也使用Json根元素?

SampleObject类:

import org.codehaus.jackson.map.annotate.JsonRootName;

@XmlRootElement(name = "sampleObject")
@JsonRootName(value = "sampleObject")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name  = "SampleObject", propOrder = {
        "id",
        "name"
})
public class SampleObject 
{
    protected String id;
    protected String name;

    public SampleObject(){}

    public …
Run Code Online (Sandbox Code Playgroud)

rest web-services jackson jersey-2.0

5
推荐指数
1
解决办法
5748
查看次数

使用 JAXB + Spring RESTful Web 服务防止 XXE(外部实体处理)攻击

我知道我们可以通过在 JAXB 中将抽象类 XMLInputFactory 中的属性 IS_SUPPORTING_EXTERNAL_ENTITIES 设置为 false 来防止 XXE 攻击。

我也看过这个stackoverflow 答案

我的问题是,

如何创建 XMLInputFactory 的实例并在 spring 应用程序加载时将此 IS_SUPPORTING_EXTERNAL_ENTITIES 属性设置为 false。并且那个特定的 XMLInputFactory 实例应该只用于所有使用 javax.xml.bind.annotation 包的类的所有 JAXB 转换。

security spring web-services jaxb javax.xml

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

标签 统计

web-services ×2

jackson ×1

javax.xml ×1

jaxb ×1

jersey-2.0 ×1

rest ×1

security ×1

spring ×1