我一直在忙着JSON一段时间,只是把它作为文本推出它并没有伤害任何人(我知道),但我想开始正确地做事.
我见过这样的JSON内容类型很多所谓的"标准":
application/json
application/x-javascript
text/javascript
text/x-javascript
text/x-json
Run Code Online (Sandbox Code Playgroud)
但哪个是正确的,还是最好的?我认为它们之间存在安全性和浏览器支持问题.
我知道有一个类似的问题,如果REST API返回JSON,那么MIME类型是什么?,但我想要一个稍微有针对性的答案.
在进入细节之前,我知道Stackoverflow上有很多对话和相关问题.所有这些都以不同的方式帮助我,所以我认为我把我的发现全部放在一起作为一个单独的有组织的常见问题解答来总结我的发现.
当然你知道这些,但我只是把它们写成快速回顾.如果我遗漏了什么,请随时编辑.
当您愿意将对象发送到Web服务或服务器端应用程序时,将使用发布请求.
是将对象从Web浏览器传递到服务器端应用程序的过程.可以使用jQuery Ajax调用或Curl post请求.
最流行的那些日子是JSON和XML.由于XML标记的性质,序列化的xml对象的大小相对较大,因此XML变得越来越不受欢迎.在本FAQ中,主要关注的是JSON2序列化.
Spring框架及其强大的注释使得以有效的方式公开Web服务成为可能.Spring中有很多不同的库.我们关注的是Spring web MVC.
这些是您可以用来在客户端发布帖子请求的工具.即使您计划使用JQuery ajax调用,我建议您使用Curl进行调试,因为它会在发出请求后为您提供详细的响应.
如果您的Web服务不依赖于Java EE模型,则必须使用@RequestBody.如果您正在使用模型并且您的JSON对象已添加到模型中,则可以通过@ModelAttribute访问该对象.仅在您的请求是GET请求或GET和POST请求组合的情况下,您将需要使用@RequestParam/@ PathVariable.
正如您从名称中看到的那样简单,如果您在服务器端方法处理请求后向客户端发送响应,则只需要@ResponseBody.
RequestMappingHandlerAdapter是Spring框架的新映射处理程序,它自Spring 3.1起取代了AnnotationMethodHandlerAdapter.如果您的现有配置仍在AnnotationMethodHandlerAdapter中,您可能会发现此帖子很有用.我的帖子中提供的配置将让您了解如何设置RequestMappingHandlerAdapter.
您需要设置一个消息转换器.这是您的序列化JSON消息体在服务器端转换为本地Java对象的方式.
基本配置从这里开始.转换器是MarshallingHttpMessageConverter和CastorMarshaller的基本配置示例,我已经用MappingJackson2HttpMessageConverter和MappingJacksonHttpMessageConverter替换它们.
我的项目设置方式,我有两个配置文件:
hadlerAdapter bean必须位于MVC Dispatcher XML文件的后面.
<bean name="handlerAdapter"
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
<ref bean="jsonConverter"/>
</list>
</property>
<property name="requireSession" value="false"/>
</bean> …Run Code Online (Sandbox Code Playgroud) 我在我看来是这样称呼它:
<%= markdown question.body %>
Run Code Online (Sandbox Code Playgroud)
这就是我的ApplicationHelper样子:
module ApplicationHelper
class HTMLwithPygments < Redcarpet::Render::HTML
def block_code(code, language)
Pygments.highlight(code, lexer:language)
end
end
def markdown(text)
renderer = HTMLwithPygments.new(hard_wrap: true)
options = {
autolink: true,
no_intra_emphasis: true,
fenced_code_blocks: true,
lax_html_blocks: true,
strikethrough: true,
superscript: true
}
Redcarpet::Markdown.new(renderer, options).render(text).html_safe
end
end
Run Code Online (Sandbox Code Playgroud)
但是,当遇到这样的标签时:
<pre class="lang-cpp prettyprint-override">
Run Code Online (Sandbox Code Playgroud)
它不会将颜色突出显示应用于该代码.这是为什么?
PS这是由Stack Overflow生成的,例如: <!-- language: lang-cpp -->
编辑1
或者更具体地说,它似乎不会格式化<code>标签内的<pre>标签.一旦<code>不在<pre>其中似乎格式化它.我该如何解决这个问题?
编辑2
问题似乎Pygment.rb是正在采取行动的数据.它是HTML,可以在这个要点中看到 - https://gist.github.com/marcamillion/14fa121cf3557d38c1a8.所以我想要做的是让Pygment body在我的要点中正确格式化该对象的属性中返回的代码.
我怎么做?
编辑3
这是我想要的HTML代码, …
我想在Rails中覆盖JSON MIME类型("application/json")("text/x-json").我试图在mime_types.rb中再次注册MIME类型,但这不起作用.有什么建议?
谢谢.
json ×3
content-type ×1
curl ×1
html-post ×1
http-headers ×1
java ×1
markdown ×1
mime ×1
mime-types ×1
pygments ×1
redcarpet ×1
ruby ×1
spring ×1