Web 環境でSpring Framework
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 {
}
sについて、@Controller
次の 2 つのクラスがあります。
PersonaDeleteOneController
と:deleteOne(@PathVariable String id, Model model)
為に@GetMapping
deleteOne(@PathVariable String id, RedirectAttributes redirectAttributes)
為に@DeleteMapping
PersonaRestController
deleteOne(@PathVariable String id)
為に@DeleteMapping
これら 2 つのクラスは、次の名前の同じパッケージ内で宣言されています。
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.
メソッド呼び出しの実行に使用していないことがわかります。