有没有办法在java中获取示例名称?

wa7juj8i  于 2021-08-25  发布在  Java
关注(0)|答案(2)|浏览(528)

这个问题在这里已经有了答案

如何获取java中的示例名称[(1份答覆)
四天前关门。
我知道这没有多大意义,但我正在尝试创建一个动态方法来记录请求,例如:

  1. @GetMapping("/my-path")
  2. public ResponseEntity<Foo> findSomethingBy(Integer bankId, String clientName, FooFilter filter){
  3. log.info("The method findSomethingBy was called with=" +**dynamicMethotRequest(Arrays.asList(bankId, clientName, filter)**);
  4. var result = service.findSomethingBy(bankId, clientName, filter);
  5. log.info("The method findSomethingBy result=" + result);
  6. return ResponseEntity.ok(result);
  7. }
  8. @GetMapping("/my-other-path")
  9. public ResponseEntity<Foo> findSomethingByAnotherThing(Integer bankId, Integr clientId){
  10. log.info("The method findSomethingBy was called with=" +**dynamicMethotRequest(Arrays.asList(bankId, clientName)**);
  11. var result = service.findSomethingByAnotherThing(bankId, clientName, filter);
  12. log.info("The method findSomethingByAnotherThing result=" + result);
  13. return ResponseEntity.ok(result);
  14. }

来自的第一个预期日志 findSomethingBy 应该是:

  1. The method findSomethingBy was called with=(bankId=1, clientName=Jack, filter=(age=24, job=dev, working=true, from=Brazil))

来自的第一个预期日志 findSomethingByAnotherThing 应该是:

  1. The method findSomethingByAnotherThing was called with=(bankId=1, clientId=1)

那我该怎么做呢 dynamicMethotRequest 要获取数组每个位置的示例名称?
这就是我尝试的方式:

  1. private String dynamicMethotRequest(List list){
  2. String result = "";
  3. var size = list.size();
  4. for (int i = 0; i < size; i++) {
  5. var element = list.get(i);
  6. String elemnetName = element.getInstanceName();
  7. if(i == 0){
  8. result = "(";
  9. }
  10. result = result + "elemnetName" + "=" + element.toString();
  11. if(i+1 == size){
  12. result = result + ")";
  13. }else {
  14. result = result + ",";
  15. }
  16. }
  17. return result;
  18. }
mlmc2os5

mlmc2os51#

您可以为所有请求实现一个拦截器,并从请求中获取所有值
创建拦截器

  1. @Component
  2. public class RequestInterceptor implements HandlerInterceptor {
  3. private static final Logger LOGGER = LoggerFactory.getLogger(RequestInterceptor.class);
  4. @Override
  5. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler ) throws Exception{
  6. doSomethingWithHandleRequest(handler, request);
  7. return true;
  8. }
  9. private void doSomethingWithHandleRequest(Object handler, HttpServletRequest request)throws Exception{
  10. if (handler instanceof HandlerMethod) {
  11. HandlerMethod method = (HandlerMethod) handler;
  12. LOGGER.info(method.getBeanType().getName()); // class name
  13. LOGGER.info(method.getMethod().getName()); // method name
  14. }
  15. // request.getHeaderNames() to get all values from headers
  16. // request.getParameterNames() to get all values from parameters
  17. // request.getReader() to get body request with HttpServletRequestWrapper() for reading bufferreader
  18. // and all information on request
  19. }
  20. }

在配置上设置拦截器

  1. @Configuration
  2. public class WebMvcConfig implements WebMvcConfigurer {
  3. @Override
  4. public void addInterceptors(InterceptorRegistry registry) {
  5. registry.addInterceptor(new RequestInterceptor());
  6. }
  7. }

因此,当您调用时,所有的请求都将在您的实现上被拦截,并在httpservletresponse上获得方法返回或值的结果

展开查看全部
plupiseo

plupiseo2#

无法保留您称之为变量的信息,您将该变量传递到数组中。
看到这个帖子了吗
如果你必须这么做(你不应该这么做),你应该使用Map。

相关问题