【问题标题】:restful service without MVC没有 MVC 的宁静服务
【发布时间】:2013-09-16 12:29:18
【问题描述】:

我想创建一个 Restful 服务,但是当我尝试 URL “http..:8080/appanalytix-web/requirementservice/saverequirements”时它不起作用

我的服务:

@Path("/requirementservice")
@Service("dimRequirementManager")
public class DimRequirementManagerImpl extends GenericManagerImpl<DimRequirement, Long> implements DimRequirementManager {
    DimRequirementDao dimRequirementDao;

    @Autowired
    public DimRequirementManagerImpl(DimRequirementDao dimRequirementDao) {
        super(dimRequirementDao);
        this.dimRequirementDao = dimRequirementDao;
    }
    @PUT
    @Path("/saverequirements")
    @Consumes("application/json")
    @Override
    public void saveAllDimRequirements(List<DimRequirement> requirementList) {
        dimRequirementDao.saveAllDimRequirements(requirementList);

    }
}

是否有必要有一个调度 servlet 来使用 url ? 由于这是我的服务,客户端将如何使用 HTTP PUT 或 POST 传递 json 字符串

添加servlet后编辑

<servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
         <param-name>contextConfigLocation</param-name>  
         <param-value></param-value>  
        </init-param>
        <load-on-startup>2</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/restServices/*</url-pattern>
    </servlet-mapping>

我在 web.xml 中添加了 servlet,我尝试了 url http..:8080/appanalytix-web/restServices/requirementservice/saverequirements 我收到以下错误

 ERROR [tomcat-http--17] Dispatcher.error(38) | Exception occurred during processing request: There is no Action mapped for namespace [/] and action name [restServices/requirementservice/saverequirements] associated with context path [/appanalytix-web].
There is no Action mapped for namespace [/] and action name [restServices/requirementservice/saverequirements] associated with context path [/appanalytix-web]. - [unknown location]
    at com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:185)
    at org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:63)
    at org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39)
    at com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58)
    at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:534)
    at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
    at org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter.doFilter(StrutsExecuteFilter.java:88)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129)
    at com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter.doFilter(StrutsPrepareFilter.java:82)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at com.vxl.appanalytix.webapp.filter.RequestAuthentication.doFilter(RequestAuthentication.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)

【问题讨论】:

  • 当然你需要一个servlet。你认为映射@Path 注释会是什么?
  • 在despacher servlet的帮助下,我可以从客户端访问服务吗?
  • 所以我的 URL 将是 http..:8080/project/Dispacher-servletURL/requirementservice/saverequirements
  • 我建议你自己试试看。

标签: java spring rest http action-mapping


【解决方案1】:

您必须有一个 servlet,否则 @Path 注释什么也不做。 在 saveAllDimRequirements 方法中 - 你必须使用 put 因为你有 @PUT 注释。

【讨论】:

  • dispatcherorg.springframework.web.servlet.DispatcherServletcontextConfigLocation 2dispatcher/restServices/* 我已经添加了servlet
  • 我可以使用的确切网址是什么?
  • 很可能是这样的:http://&lt;server-ip&gt;:8080/&lt;project-name&gt;/restServices/requirementservice/saverequirements
  • 如果您遇到问题,我建议您先将@PUT 更改为@GET 并删除@Consumes("application/json")。通过浏览器浏览到这个 url(代码中有断点),看看它是否到达。如果是,您可以返回 @PUTapplication/json
  • 嗨 Avi,我仍然收到相同的错误 处理请求期间发生异常:没有为命名空间 [/] 和操作名称 [restServices/requirementservice/saverequirements] 映射的操作与上下文路径关联[/appanalytix-web]
猜你喜欢
  • 2013-07-29
  • 1970-01-01
  • 2014-04-06
  • 1970-01-01
  • 1970-01-01
  • 2015-07-19
  • 2019-08-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多