Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在SpringMVC中,HTTP删除/a/{id_a}/b/{id_b}变成/a/{id_a}/b/{id_b}/a/{id_a}/b/{id_b}_Java_Spring_Rest_Spring Mvc - Fatal编程技术网

Java 在SpringMVC中,HTTP删除/a/{id_a}/b/{id_b}变成/a/{id_a}/b/{id_b}/a/{id_a}/b/{id_b}

Java 在SpringMVC中,HTTP删除/a/{id_a}/b/{id_b}变成/a/{id_a}/b/{id_b}/a/{id_a}/b/{id_b},java,spring,rest,spring-mvc,Java,Spring,Rest,Spring Mvc,我在SpringMVC中有一个servlet,它在实现RESTAPI时通常运行良好,但是当我尝试删除子资源时,我遇到了一个奇怪的错误 说我有: -作为父资源的用户 -作为子资源的地址 如果我创建POST、updateput或retrieveget地址,一切都正常,但是当我尝试删除它时,我收到一个404notfound,并查看我看到的日志 servlet.DispatcherServlet (DispatcherServlet.java:1218) - Rendering view [org

我在SpringMVC中有一个servlet,它在实现RESTAPI时通常运行良好,但是当我尝试删除子资源时,我遇到了一个奇怪的错误

说我有: -作为父资源的用户 -作为子资源的地址

如果我创建POST、updateput或retrieveget地址,一切都正常,但是当我尝试删除它时,我收到一个404notfound,并查看我看到的日志

 servlet.DispatcherServlet (DispatcherServlet.java:1218) - Rendering view 

[org.springframework.web.servlet.view.InternalResourceView: name 'users/544e6b02300429b462c6b8ea/billing-addresses/4'; URL [users/544e6b02300429b462c6b8ea/billing-addresses/4]] in DispatcherServlet with name 'api-dispatcher'
 view.AbstractView (AbstractView.java:377) - Added model object 'id_user' of type [java.lang.String] to request in view with name 'users/544e6b02300429b462c6b8ea/billing-addresses/4'
 view.AbstractView (AbstractView.java:377) - Added model object 'id_addresses' of type [java.lang.String] to request in view with name 'users/544e6b02300429b462c6b8ea/billing-addresses/4'
 view.InternalResourceView (InternalResourceView.java:207) - Forwarding to resource [users/544e6b02300429b462c6b8ea/billing-addresseses/4] in InternalResourceView 'users/544e6b02300429b462c6b8ea/billing-addresses/4'
 servlet.DispatcherServlet (DispatcherServlet.java:838) - DispatcherServlet with name 'api-dispatcher' processing DELETE request for [/rest-local/rest/users/544e6b02300429b462c6b8ea/billing-addresses/users/544e6b02300429b462c6b8ea/billing-addresses/4]
 handler.AbstractHandlerMethodMapping (AbstractHandlerMethodMapping.java:246) - Looking up handler method for path /users/544e6b02300429b462c6b8ea/billing-addresses/users/544e6b02300429b462c6b8ea/billing-addresses/4
 handler.AbstractHandlerMethodMapping (AbstractHandlerMethodMapping.java:254) - Did not find handler method for [/users/544e6b02300429b462c6b8ea/billing-addresses/users/544e6b02300429b462c6b8ea/billing-addresses/4]
 servlet.DispatcherServlet (DispatcherServlet.java:1114) - No mapping found for HTTP request with URI [/rest-local/rest/users/544e6b02300429b462c6b8ea/billing-addresses/users/544e6b02300429b462c6b8ea/billing-addresses/4] in DispatcherServlet with name 'api-dispatcher'
 servlet.FrameworkServlet (FrameworkServlet.java:991) - Successfully completed request
 servlet.FrameworkServlet (FrameworkServlet.java:991) - Successfully completed request
这就像出于某种原因,我不明白在某个点上,它附加了两次相对路径,当然最后的路径没有被处理,我得到了一个404未找到

在代码库中,这是我尝试删除子资源时的唯一情况,因为所有现有的资源删除都在工作,只有在这种情况下,我看到这种奇怪的行为,该资源和其他资源的代码完全相同

服务器端映射为:

 @RequestMapping(value = "/{id_user}/billing-addresses/{id_address}", method = RequestMethod.DELETE, produces = "application/json")
    public ModelAndView deleteBillingAddress(@PathVariable("id_user") String idUser,
                                             @PathVariable("id_address") String idAddress,
                                             HttpServletResponse httpServletResponse,
                                             Principal principal)
我正在用以下方法进行测试:

curl -i -X DELETE \
   -H "Content-Type:application/json" \
   -H "Accept-Language:it" \
 'http://localhost:8081/rest-local/rest/users/544e6b02300429b462c6b8ea/billing-addresses/4'

有什么想法吗

问题是我返回了一个空的ModelAndView对象,该对象是用newmodelandview实例化的

现在我改变了它:

new ModelAndView(this.userMapperView, DATA_FIELD, billingAddress); 

不确定这是不是最好的方法,但至少现在它可以工作了。

在一个简单的rest工具中,这可以工作吗?你能发布客户端代码吗?我正在使用DHC一个用于Chrome的rest客户端插件,它使用的代码是:curl-I-X DELETE \-H Content Type:application/json \-H Accept Language:it\向我们展示你的控制器映射我已经用服务器端映射和客户端测试代码更新了问题。你显示的日志正确吗?您的日志显示对用户/544e6b02300429b462c6b8ea/***发货地址***/3的请求,但您对用户/544e6b02300429b462c6b8ea/***账单地址***/3使用curl