目前,我正在使用Spring框架编写一些webapp。对于所有@RestController API,我使用Jackson生成Json对象。
@RestController看起来像
@RestController
@RequestMapping("/api")
public class SomeAPI {
@RequestMapping(method = RequestMethod.GET)
public A getA() {
A a = new A();
return a;
}
}
但是当两个对象具有双向引用时存在循环依赖性问题。例如,有两个POJO类如下:
class A {
private B b;
// constructor
...
// setters and getters.
...
}
class B {
private A a;
// constructor
...
// setters and getters.
...
}
我可以通过这种方式轻松解决,使用注释:http://java.dzone.com/articles/circular-dependencies-jackson
但那不是我的观点。
现在,我无法更改A和B类的代码,因此我无法在其中使用任何注释。 那么如何在不使用注释的情况下解决此问题?
提前感谢任何建议!
答案 0 :(得分:2)
最后,我找到了Mixin Annotations来解决圆形而不触及现有的POJO。
这里有Minin Annotations的参考:http://wiki.fasterxml.com/JacksonMixInAnnotations
以下是使用Mixin的简要步骤:
将ObjectMapper添加到web-spring-servlet.xml
<bean id="myFrontObjectMapper" class="my.anying.web.MyObjectMapper"></bean>
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper" ref="myObjectMapper"></property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
实现MyObjectMapper
public class MyObjectMapper extends ObjectMapper {
public MyObjectMapper() {
this.registerModule(new MixinModule());
}
}
实施MixinModule
public class MixinModule extends SimpleModule {
private static final long serialVersionUID = 8115282493071814233L;
public MixinModule() {
super("MixinModule", new Version(1, 0, 0, "SNAPSHOT", "me.anying",
"web"));
}
public void setupModule(SetupContext context) {
context.setMixInAnnotations(Target.class, TargetMixin.class);
}
}
完成。
现在,TargetMixin类上的所有注释都将应用于Target类。