我有一个要求,我需要从网站上下载PDF.PDF需要在代码中生成,我认为这将是freemarker和像iText这样的PDF生成框架的组合.有更好的方法吗?
但是,我的主要问题是如何允许用户通过Spring Controller下载文件?
这是Spring MVC @PathVariable被截断的问题的延续
Spring论坛声明它已修复(3.2版本)作为ContentNegotiationManager的一部分.见下面的链接.
https://jira.springsource.org/browse/SPR-6164
https://jira.springsource.org/browse/SPR-7632
在我的应用程序中,带有.com的requestParameter被截断.
谁能解释我如何使用这个新功能?它是如何在xml中配置的?
我在控制器中遇到了一个方法.这个id是什么:.+ ??
@RequestMapping(value="/index/{endpoint}/{type}/{id:.+}", method=RequestMethod.POST, consumes=kContentType, produces=kProducesType)
@ResponseBody
public String indexData(@PathVariable(value="endpoint") String endpoint, @PathVariable(value="type") String type, @PathVariable(value="id") String id, @RequestBody String body, HttpServletRequest request) {
logger.debug("In web controller for endpoint " + endpoint);
return indexController.indexData(endpoint, type, id, body, getSecurityContextProvider(request));
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试将一个Web项目从Jersey迁移到Spring MVC 3.0.这个过程非常简单,直到我开始使用点符号迁移应该处理URL的控制器:"/ myApp/resources/create/root.subFolder1 ".Spring MVC似乎无耻地从URL中删除了".subFolder1"部分,它发生在框架代码内部(参见AbstractUrlHandlerMapping类)
uriTemplateVariables.putAll(getPathMatcher().extractUriTemplateVariables(matchingPattern, urlPath));
Run Code Online (Sandbox Code Playgroud)
所以我的控制器方法是用root path参数调用的,而不是root.subFolder1
我真的想找到一种方法来自定义这种行为.有什么建议吗?
PS.该要求有点保持现有的URL结构,即切换到查询参数"/ myApp/resources/create/?path = root.subFolder1 "的变通方法,我无法考虑.
PS.我的Spring配置看起来像
<mvc:annotation-driven/>
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="useDefaultSuffixPattern" value="false" />
</bean>
<context:component-scan base-package="my.app.pkg"/>
Run Code Online (Sandbox Code Playgroud) 在我使用Spring Framework开发的REST API中,我有一个Rest端点接收Two Double值,Rest Call是:http:// localhost:8080/restapp/events/nearby/12.910967/77.599570
这里,第一个参数(双数据类型)即12.910967我能正确接收,即12.910967.但是第二个参数,即77.599570,我只能在小数点截断后得到77.0的数据.
我的REST后端是:
@RequestMapping(value = "/nearby/{lat}/{lngi}", method = RequestMethod.GET, produces = "application/json")
public List<Event> getNearByEvents(@PathVariable("lat") Double lat, @PathVariable("lngi") Double lngi, HttpServletResponse response) throws IOException
Run Code Online (Sandbox Code Playgroud)
如何在REST api中接收双数据类型?
我正在使用SpringMVC 3.1.3.如果@PathVariable最后有空格,则会截断/修剪它.有没有办法阻止修剪
@RequestMapping(value="deleteConfig/{id}/", method=RequestMethod.DELETE)
public @ResponseBody JsonResponse<?> deleteConfig(@PathVariable("id") String id)
Run Code Online (Sandbox Code Playgroud)
如果来自客户端的id最后有一个空格,比如 - "abc"或者甚至是"abc%20"那么我在控制器中得到的变量id只是"abc"而不是"abc"
你能建议一种方法来解决这个问题
我有一个 Spring REST 控制器:
@RestController
@RequestMapping(value = "/myresource")
public class MyResourceController {
...
}
Run Code Online (Sandbox Code Playgroud)
使用 GET 请求方法:
@RequestMapping(method = GET, value = "/{value1}/{value2}/{value3}", produces = MediaType.APPLICATION_JSON_VALUE + ";charset=UTF-8")
public ResponseEntity<MyResponseType> getMyResource(
@ApiParam(value = "...",...)
@PathVariable("value1") String value1,
@ApiParam(value = "...",...)
@PathVariable("value2") String value2,
@ApiParam(value = "...",...)
@PathVariable("value3") String value3) {
//...
}
Run Code Online (Sandbox Code Playgroud)
我希望这个方法可以通过以下方式调用:
http://myserver:8080/myresource/value1/value2/value3
Run Code Online (Sandbox Code Playgroud)
但它只能通过斜杠到达:
http://myserver:8080/myresource/value1/value2/value3/
Run Code Online (Sandbox Code Playgroud)
为什么会这样或者是什么导致了这种情况?
Swagger 假设没有尾部斜杠,我现在无法使用 swagger 发送请求。
我该怎么做才能使第一个 URL 工作而不使第二个 URL 工作?
非常感谢您的评论和回答。
编辑 2:
我发现没有斜线 value3 的信息是不完整的。value3 必须是电子邮件地址,但从最后一个点开始的所有内容都被切断了。因此,我收到的不是“myemail@something.de”,而是“myemail@something”。
这解释了为什么我无法获得正确的结果(无内容和 HTTP 状态代码 404)。但我仍然不明白为什么会发生这种情况。此外,如果我的电子邮件地址在顶级域(如 .com)中包含三个字母,则请求永远不会到达 GET 方法“getMyResource”...... …
在我的Spring App中,我有一个像这样注释的控制器:
@Controller
@RequestMapping("/1/site")
Run Code Online (Sandbox Code Playgroud)
如果我尝试将请求映射值更改为此值,则会得到404:
@Controller
@RequestMapping("/1.0/site")
Run Code Online (Sandbox Code Playgroud)
期间发生了什么,我该如何解决?
(请参阅2015年8月20日下方的编辑部分)
最近我遇到了类似的问题(Get请求仅适用于斜杠(spring REST注释)),解决方案是在@RequestMapping的值中添加一个正则表达式(另请参见Spring MVC @PathVariable被截断)。
但是,现在我们已经意识到问题仍然存在,但仅适用于以.com或.org结尾的电子邮件地址。这很奇怪。
不久,我使用Spring Annotations构建REST服务。我有一个带有三个参数的GET请求,最后一个是电子邮件。
我的控制器:
@RequestMapping(method = GET, value = "/{value1}/{value2}/{value3:.+}",
produces = MediaType.APPLICATION_JSON_VALUE + ";charset=UTF-8")
public ResponseEntity<MyResponseType> getMyResource(
@ApiParam(value = "...",...)
@PathVariable("value1") String value1,
@ApiParam(value = "...",...)
@PathVariable("value2") String value2,
@ApiParam(value = "...",...)
@PathVariable("value3") String value3) {
//...
}
Run Code Online (Sandbox Code Playgroud)
如果我致电: http:// myserver:8080 / myresource / value1 / value2 / value3
如果value3 = email@domain.de / co.uk / .name / .biz /.info,则完全没有问题。
但是,对于某些顶级域名(到目前为止,.com,.org),我收到Http状态码406(不接受)。
如果添加斜杠,它将起作用:
spring ×8
spring-mvc ×6
java ×5
rest ×3
annotations ×1
controller ×1
download ×1
file ×1
get ×1
media-type ×1