Spring试图将URL的最后一部分解析为Long参数

时间:2015-05-21 13:35:57

标签: java spring rest

当我尝试在网络浏览器中通过此URL呼叫我的服务器时:

http://localhost:8080/server_platform/api/predios/count

服务器正常工作并返回预期结果。

REST控制器以这种方式定义:

@Controller
@RequestMapping(value = "api/predios")
public class PredioController {

    @RequestMapping(value = "/count", method = { RequestMethod.GET }, produces = { "text/plain" })
    @ResponseStatus(value = HttpStatus.OK)
    public @ResponseBody String count(
            HttpServletResponse response) throws Exception {
        // code removed to simplify
    }    
}

但是当我使用Spring exchange的{​​{1}}方法时,这样:

RestTemplate

服务器未输入方法count()并输出此错误:

  

org.springframework.beans.TypeMismatchException:无法将'java.lang.String'类型的值转换为必需类型'java.lang.Long';嵌套异常是java.lang.NumberFormatException:对于输入字符串:“count”

变量restTemplate.exchange( url, HttpMethod.GET, entity, String.class); 与先前在Web浏览器中使用的变量完全相同。变量实体也正确形成(事实上,如果我更改url删除url部分,服务器会使用正确的REST控制器正确响应。)

看起来Spring试图将URL的/count部分解析为Long值,但我无法找到其中的位置和原因。

你知道为什么会这样吗?

当我启动服务器时,日志包含这一行(因为它可能是一个有价值的信息):

  

2015-05-21 15:26:47,637 INFO [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping] - 映射“{[/ api / predios / count],methods = [GET], params = [],headers = [],consume = [],produce = [text / plain],custom = []}“on public java.lang.String es.controllers.restful.PredioController.count(javax.servlet。 http.HttpServletResponse)抛出java.lang.Exception

1 个答案:

答案 0 :(得分:1)

您必须使用标题" Accept text / plain"配置REST模板。默认情况下,模板仅使用" application / json",它不会映射到您的控制器。