我正在使用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) 我知道我们可以通过在 JAXB 中将抽象类 XMLInputFactory 中的属性 IS_SUPPORTING_EXTERNAL_ENTITIES 设置为 false 来防止 XXE 攻击。
我也看过这个stackoverflow 答案。
我的问题是,
如何创建 XMLInputFactory 的实例并在 spring 应用程序加载时将此 IS_SUPPORTING_EXTERNAL_ENTITIES 属性设置为 false。并且那个特定的 XMLInputFactory 实例应该只用于所有使用 javax.xml.bind.annotation 包的类的所有 JAXB 转换。