我们是一个Spring Boot商店,并且非常依赖Spring MVC作为我们的REST端点.我们使用Boot和嵌入式Tomcat来创建自托管JAR.是否可以用Ratback替换Tomcat,同时仍然保留我的所有Spring MVC代码?我担心Spring MVC会以某种方式绑定到servlet规范中,并且不会在没有servlet容器的情况下运行.我知道dsyer/spring-boot-ratpack的工作,但在略读之后,代码无法决定Spring MVC是否能够很好地使用桥接器.是否有人知道任何可以让我们保留对Spring MVC的投资并让Spring Boot使用Ratpack来管理HTTP流量的工作?
我在Groovy控制台中启动了一个小型的ratpack应用程序,但我无法从文档中找到如何获取已在请求中发送的json数据.
@Grab("io.ratpack:ratpack-groovy:0.9.4")
import static ratpack.groovy.Groovy.*
import groovy.json.JsonSlurper
ratpack {
handlers {
get {
def slurper = new JsonSlurper()
def result = slurper.parseText('{"person":{"name":"Guillaume","age":33,"pets":["dog","cat"]}}')
render "Hello world! ${result.person}"
}
post("foo") {
def slurper = new JsonSlurper()
def result = slurper.parseText("WHAT DO i PUT HERE?")
render "Hello world! ${result.person}"
}
}
}
Run Code Online (Sandbox Code Playgroud)
一个示例请求:
curl -XPOST -H "Content-Type: application/json" -d '{"person":{"name":"Guillaume","age":33,"pets":["dog","cat"]}}' localhost:5050/foo
Run Code Online (Sandbox Code Playgroud) 我试图将部分html注入GTPL文件,但似乎总是"逃脱"html内容.如何将HTML代码段发送到标记并直接呈现?
"hello.gtpl"的内容
yieldUnescaped '<!DOCTYPE html>'
html {
yieldUnescaped text
}
Run Code Online (Sandbox Code Playgroud)
来自ratpack.groovy
get('helloplain') { //works .but clumsy
String htmlPayLoad = "<!DOCTYPE html> <html> <title> Hello </title><body> <h3> Hello </h3> </body> </html>"
context.getResponse().contentType(HttpHeaderConstants.HTML_UTF_8).send(htmlPayLoad.getBytes());
}
get('hellotemplate') { //ex: /users/
String text = "<title> Hello </title><body> <h3> Hello </h3> </body> "
render groovyMarkupTemplate( "hello.gtpl" ,text: text )
}
Run Code Online (Sandbox Code Playgroud)
localhost:5050/helloplain 提供适当的HTML,以 localhost:5050/hellotemplate提供已转义所有HTML内容的文件.
<!DOCTYPE html><html><title> Hello </title><body> <h3> Hello </h3> </body> </html>
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
我有一台运行 nginx 的服务器,该服务器为使用 ratpack 构建的 Web 应用程序提供服务,但从浏览器或使用 curl 请求网站时,我无法获得 304 响应。
Nginx 配置:
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_read_timeout 240;
proxy_pass http://example.com/;
proxy_redirect off;
add_header Last-modified "Wed, 29 Nov 2017 12:56:25";
if_modified_since before;
}
Run Code Online (Sandbox Code Playgroud)
从浏览器我总是得到 200 ok 和 curl 我得到
HTTP/1.1 302 Found
Server: nginx/1.6.3
Date: Wed, 29 Nov 2017 14:23:07 GMT
Content-Length: 0
Connection: keep-alive
location: http://example.com/display
Last-Modified: Wed, 29 Nov 2017 12:56:25
Run Code Online (Sandbox Code Playgroud)
我已经尝试了这两个 curl 命令,并且都给出了上述响应:
curl -I -H …Run Code Online (Sandbox Code Playgroud) 我希望在使用ratpack 实现REST API 时使用单个ExceptionHandler 来处理每个异常。此 ExceptionHandler 将处理每个运行时异常并相应地发送 json 响应。
可以在ratpack中实现吗?在 Spring 中,我们使用 @ControllerAdvice 注释来做到这一点。我想使用ratpack 实现类似的行为。
谢谢你的帮助。
我正在尝试运行ratpack (https://github.com/pledbrook/lazybones/tree/master/src/templates/ratpack)
使用"gradlew run" - 这使用默认端口,有没有办法在命令行上设置将用于http的端口?
像gradlew运行-Dhttp.port = 8080或类似的东西?