当前位置: 首页 > 知识库问答 >
问题:

如何调用用@Component注释的Spring Java方法?

阎单鹗
2023-03-14

我有一个由tomcat运行的前端,我的后端处理由Mule运行。

例如,

你好世界html

<div>
  <button id="btnSayHello" ng-click="sayHello()" data-transalte>Click Me</button>
</div>

你好世界js公司

$scope.sayHello = function() {
  $http({
    method: 'GET',
    url: $rootScope.serviceUrl + '/triggers/greetings/' + $scope.name
  }).success(function (response) {
    alert("Success");
  }).error(function () {
    alert("Error");
  })
}

我的触发器。Java语言

@Component
@Path("/triggers")
public class MyTriggers {

  ...

  @GET
  @Produce("text/plain")
  @Path("/greetings/{name}")
  @Consume("text/plain")
  public String sayHello(@PathParam("name") String name) {
    
    log.info("Hello, " + name);
    
    return "SUCCESS";
  }
  
}

招呼xml

<flow name="greeting">
   <jersey:resources>
       <spring-object bean="MyTriggers"/>
   </jersey:resources>
</flow>

我的结果一直以错误的形式返回,这意味着它在JavaScript级别失败。

不太确定出了什么问题。

Tomcat正在本地主机8080上运行。

共有1个答案

晁绍辉
2023-03-14

我假设您使用的是Mule 3。x,因为您似乎正在部署Mule可部署拉链。你的问题中有几个问题。

Mule不仅仅自动调用Spring bean或方法。你需要有一个叫它的骡子流。具体来说,默认情况下,@组件注释对Mule没有任何作用。

我从您提到Tomcat推断出您正在将Mule可部署zip(即Mule 3的Mule应用程序)部署到Tomcat中。这些zip文件旨在部署到Mule服务器,而不是Tomcat服务器。如果没有更多关于您如何打包和部署的详细信息,我认为它不会起作用。如果您试图在Tomcat中进行应用程序的嵌入式部署,您应该遵循https://docs.mulesoft.com/mule-runtime/3.9/deploying-mule-as-a-service-to-tomcat.的说明,我不建议使用这种方法。这是一种传统方法,令人困惑,并且不支持Mule的许多组件。

Java方法中的其他注释似乎是JAX-RS注释。泽西模块中的Mule支持这一点。它应该在调用的流中包含一些东西。

例子:

xml prettyprint-override">  <flow name="HelloWorld">
     <http:listener config-ref="HTTP_Listener_Configuration" path="/*" doc:name="HTTP"/>
     <jersey:resources>
         <component class="com.mycompany.jersey.HelloWorldResource"/>
     </jersey:resources>
  </flow>

Java端:

package com.mycompany.jersey;

import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.PathParam;

@Path("/helloworld")
public class HelloWorldResource {

    @POST
    @Produces("text/plain")
    @Path("/{name}")
    public String sayHelloWithUri(@PathParam("name") String name) {
        return "Hello " + name;
    }
}

参考文件:https://docs.mulesoft.com/mule-runtime/3.9/jersey-module-reference

JavaScript/超文本标记语言应该不是很相关。它生成的HTTP请求是。

 类似资料:
  • 我是Spring异步任务执行的新手,所以如果这听起来像个愚蠢的问题,请原谅我。 我读到,从Spring 3. x开始,在方法级别引入了@Async注释,以便异步调用该方法。我还了解到,我们可以在Spring配置文件中配置ThreadPoolTaskExecator。 我无法理解的是,如何从tak执行器调用@Async注释的方法让我们假设-AsyncTaskExecutor 早些时候,我们经常在课堂

  • 我在带有自定义注释的方法上有一个切入点。 此方法是从应用程序中的不同位置调用的。 就像我们在付款被批准时从paymentManager的方法调用sendEmail一样。当任务完成时,我们从taskmanager的方法调用sendmail。 我必须找出触发sendEmail的事件。 我在paymentManager的上应用了自定义注释,在TaskManager的方法上应用了自定义注释。 如何在方面获

  • 问题内容: 我想编写自己的Web安全模块库,但无法解决问题。例; 我有一堂课,有一种方法。方法有我的自定义注释。 当此方法调用时,如何触发我的注释。 (示例; Hibernate验证程序。我们在method上编写了hibernate批注,它仅在被调用的方法上起作用) 顺便说一句我的英语不好:) 问题答案: 注释不是“触发的” …您必须编写代码来查找它们的存在并采取措施。 “代码”可以在运行时执行,

  • 我知道从中调用带注释的方法,前面已经讨论过了。 但是我不明白为什么当bean被覆盖时它就不起作用了。 我有一个遗留类,我不能修改。它是一个配置,同时也是一个业务bean。这是一个简化版本: 现在,调用返回而不是。 当配置被删除并且测试上下文的配置被设置为时,一切都能正常工作(结果为)。 在测试中注册bean有什么不同?

  • 我有一个被注释为的类,然后将其添加到另一个类中。但是,我需要删除这个注释,而是在以前自动连线它的类中用一个注释方法创建它。 以前的类看起来像: ...或者我直接调用这个方法(在我看来不是正确的方法): …或者这两个都不正确?