我Spring Framework
在 Web 环境中使用 4.3.3。
我有一个@Controller
用于Web
请求的方法Web Browser
,它使用其他方式的依赖关系,@Controller
但用于Rest
目的。后者提到使用@Service
等...
这种关于使用“Rest”的“Web”的方法如何在使用 Spring MVC的内容协商中解释依赖关系Combining Data and Presentation Formats
。直到这里进行开发/测试和生产工作正常。这是一种有价值的方法。
注意该类Rest
带有注释,@Controller
因为我使用ResponseEntity<?>
和@ResponseBody
。
问题在于AOP
关于它的基础设施,我有:
@Configuration
@EnableAspectJAutoProxy
public class AopConfig {
}
关于@Controller
s 我有这两个类:
PersonaDeleteOneController
和:deleteOne(@PathVariable String id, Model model)
为了@GetMapping
deleteOne(@PathVariable String id, RedirectAttributes redirectAttributes)
为了@DeleteMapping
PersonaRestController
deleteOne(@PathVariable String id)
为了@DeleteMapping
这两个类在同一个包中声明,名为:
com.manuel.jordan.controller.persona
我有以下内容@Pointcut
:
@Pointcut(value=
"execution(* com.manuel.jordan.controller.*.*Controller.deleteOne(String, ..))
&& args(id) && target(object)")
public void deleteOnePointcut(String id, Object object){}
这@Pointcut
用于以下建议:
@Before(value="ControllerPointcut.deleteOnePointcut(id, object)")
public void beforeAdviceDeleteOne(String id, Object object){
logger.info("beforeAdviceDeleteOne - @Controller: {} - Method: deleteOne - id: {}", object.getClass().getSimpleName(), id);
}
当我执行Rest
测试时,我可以通过AOP + logging
打印以下模式来确认:
@Controller
(休息)->@Service
->@Repository
直到这里所有的工作都按预期进行
当我执行Web
测试时,我可以通过AOP + logging
打印以下模式来确认:
@Controller
(休息)->@Service
->@Repository
我需要或期望的是以下内容:
@Controller
(网络)->@Controller
(休息)->@Service
->@Repository
有什么问题或遗漏?deleteOne
签名对它们的参数没有歧义。
生产的情况相同。
Α
这里的控制器:
@Controller
@RequestMapping(value="/personas")
public class PersonaDeleteOneController {
private final PersonaRestController personaRestController;
@Autowired
public PersonaDeleteOneController(PersonaRestController personaRestController){
this.personaRestController = personaRestController;
}
@GetMapping(value="/delete/{id}",
produces=MediaType.TEXT_HTML_VALUE)
public String deleteOne(@PathVariable String id, Model model){
model.addAttribute(personaRestController.findOneById(id));
model.addAttribute("root", "/personas/delete");
return "persona/deleteOne";
}
@DeleteMapping(value="/delete/{id}",
produces=MediaType.TEXT_HTML_VALUE)
public String deleteOne(@PathVariable String id, RedirectAttributes redirectAttributes){
personaRestController.deleteOne(id);
redirectAttributes.addFlashAttribute("message", "process.successful");
return "redirect:/message";
}
}
和
@Controller
@RequestMapping(value="/personas")
public class PersonaRestController {
private final PersonaService personaService;
@Autowired
public PersonaRestController(PersonaService personaService){
this.personaService = personaService;
}
@DeleteMapping(value="/{id}")
public ResponseEntity<Void> deleteOne(@PathVariable String id){
personaService.deleteOne(id);
return ResponseEntity.noContent().build();
}
....
你怎么能看到我不使用this.
来执行方法调用。