如何在spring mvc中添加自定义内容类型为json?

时间:2016-06-28 22:11:52

标签: spring spring-mvc spring-4

我有一个已过时的客户端应用程序,并以Content-Type: json而不是Content-Type: application/json发送请求前端。

无法(在不久的将来)客户端应用程序可以更改。 我正在使用Spring实现服务,我几乎得到了端点工作,但只有当content-Type为application/json时。如果“json”设置了s内容类型,我得到415不支持的MediaType错误,这是有道理的。

我如何解决这个问题,短期修复的黑客将是理想的

这有效,但要求客户端将标题发送为“application / json”

 @RequestMapping(value="person", method = RequestMethod.POST, consumes="application/json")
    @ResponseBody
    public List<PersonProfile> getProfiles (@RequestBody Wrapper wrapper) {

在容器启动期间失败

@RequestMapping(value="person", method = RequestMethod.POST, consumes="json")
    @ResponseBody
    public List<PersonProfile> getProfiles (@RequestBody Wrapper wrapper) {

1 个答案:

答案 0 :(得分:0)

415不支持的MediaType错误。

我不知道你的ajax代码。

但是,你在jquery文件中读到了。也许解决

<强>的contentType

  

contentType(默认值:'application / x-www-form-urlencoded; charset = UTF-8')   类型:布尔值或字符串   将数据发送到服务器时,请使用此内容类型。默认为“application / x-www-form-urlencoded; charset = UTF-8”,这在大多数情况下都适用。如果您明确地将内容类型传递给$ .ajax(),那么它总是被发送到服务器(即使没有数据发送)。从jQuery 1.6开始,你可以传递false来告诉jQuery不要设置任何内容类型标题。注意:W3C XMLHttpRequest规范规定字符集始终为UTF-8;指定另一个字符集不会强制浏览器更改编码。注意:对于跨域请求,将内容类型设置为application / x-www-form-urlencoded,multipart / form-data或text / plain以外的任何内容将触发浏览器向服务器发送预检OPTIONS请求。

<强>的dataType

  

dataType(默认值:Intelligent Guess(xml,json,script或html))   类型:字符串   您期望从服务器返回的数据类型。如果没有指定,jQuery将尝试根据响应的MIME类型推断它(XML MIME类型将产生XML,在1.4 JSON中将产生一个JavaScript对象,在1.4脚本中将执行脚本,其他任何东西将是以字符串形式返回)。可用的类型(以及作为成功回调的第一个参数传递的结果)是:   “xml”:返回可以通过jQuery处理的XML文档。   “html”:以纯文本形式返回HTML;包含的脚本标记在插入DOM时进行评估。   “script”:将响应评估为JavaScript并将其作为纯文本返回。通过将查询字符串参数 = [TIMESTAMP]附加到URL来禁用缓存,除非缓存选项设置为true。注意:这会将POST转换为GET以获取远程域请求。   “json”:将响应计算为JSON并返回JavaScript对象。跨域“json”请求将转换为“jsonp”,除非请求选项中包含jsonp:false。 JSON数据以严格的方式解析;任何格式错误的JSON都会被拒绝,并抛出一个解析错误。从jQuery 1.9开始,空响应也被拒绝;服务器应该返回null或{}的响应。 (有关正确的JSON格式的更多信息,请参阅json.org。)   “jsonp”:使用JSONP加载JSON块。添加额外的“?callback =?”到URL的末尾以指定回调。通过将查询字符串参数“ = [TIMESTAMP]”附加到URL来禁用缓存,除非缓存选项设置为true。   “text”:纯文本字符串。   多个空格分隔值:从jQuery 1.5开始,jQuery可以将dataType从Content-Type标头中收到的数据转换为您需要的数据类型。例如,如果要将文本响应视为XML,请对dataType使用“text xml”。您还可以发出JSONP请求,将其作为文本接收,并由jQuery解释为XML:“jsonp text xml”。类似地,诸如“jsonp xml”之类的速记字符串将首先尝试从jsonp转换为xml,如果失败,则从jsonp转换为text,然后从text转换为xml。

你需要按消费和生产进行搜索。

你错了使用消费..