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 作為參數傳遞給其方法。
添加回答
舉報