3 回答
TA贡献1780条经验 获得超5个赞
根据定义,POJO(Plain Old Java Object)是一个普通的 Java 对象类(即,不是 JavaBean、EntityBean 等)并且不充当任何其他特殊角色,也不实现任何 Java 的任何特殊接口构架。这个术语是由 Martin Fowler、Rebbecca Parsons 和 Josh MacKenzie 创造的,他们相信通过创建首字母缩写词 POJO,这样的对象会有一个“花哨的名字”,从而使人们相信它们是值得使用的。链接:https : //www.webopedia.com/TERM/P/POJO.html
换句话说,POJO 应该只包含属性而不包含其他任何内容。
我认为在这种情况下,我们可以通过将服务注入控制器方法来解决问题。
@RestController
public class ExampleController {
@Autowired
private LowerCaseService lowerCaseService;
@PostMapping("/example")
String example(@RequestBody Example example) {
return lowerCaseService. toLowerCase(example.getValue);
}
}
TA贡献1840条经验 获得超5个赞
您可以实现您正在尝试实现自己的 RequestBodyAdviceAdapter ......基本上涉及 3 个步骤:
创建一个扩展 RequestBodyAdviceAdapter 并实现 ApplicationContextAware 的类(因此您可以访问应用程序上下文)。
实现supports()方法:
return ((Class) targetType).isAssignableFrom(Example.class);
覆盖 afterRead() 方法:
public Object afterBodyRead(Object body, HttpInputMessage inputMessage, MethodParameter parameter, Type targetType, Class<? extends HttpMessageConverter<?>> converterType) {
final Example example = (Example) super.afterBodyRead(body, inputMessage, parameter, targetType, converterType);
final AutowireCapableBeanFactory autowireCapableBeanFactory = applicationContext.getAutowireCapableBeanFactory();
autowireCapableBeanFactory.autowireBeanProperties(example, AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE, true);
return example;
}
TA贡献2051条经验 获得超10个赞
简单的答案是否定的,您不能,因为在 Spring 的 Context 中实例化 bean 时会注入依赖项,而这个 POJO 只是 Jackson 映射(可能)的一个实例。
但是比这更重要的是架构原则,您真的不应该将您的业务服务放在您的外部模型中(示例),因为这显然违反了关注点分离。
您应该在控制器类中注入您的服务,并将 DTO 作为参数传递给其方法。
添加回答
举报