Spring MVC:@ResponseBody,415 不支持的媒体类型

2024-04-25

我在将 JSON Post 映射到特定 Java 对象以通过以下方式保存时遇到问题休眠

Ajax 调用的标头设置正确...

Accept          application/json
Content-Type    application/json; charset=UTF-8

HTTP 方法是POST

这是我的配置...

我的 Spring MVC 函数映射如下所示

@RequestMapping(value = {"/save.json"},method = RequestMethod.POST)
public ModelMap save(@RequestBody Seizure seizureObj,Model model) {
   ...
}

在我的容器 xml 中我有一个内容协商视图解析器像这样

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
    <property name="mediaTypes">
        <map>
            <entry key="html" value="text/html" />
            <entry key="json" value="application/json" />
        </map>
    </property>
    <property name="viewResolvers">
        <list>
            <bean id="viewResolver"
                class="org.springframework.web.servlet.view.InternalResourceViewResolver">
                <property name="prefix" value="/WEB-INF/assets/" />
                <property name="suffix" value=".jsp" />
            </bean>
        </list>
    </property>
    <property name="defaultViews">
        <list>
            <bean
                class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">
                <property name="prefixJson" value="false" />
                <property name="objectMapper" ref="jacksonObjectMapper" />
            </bean>
        </list>
    </property>
</bean>

在我的容器 xml 中,杰克逊的部分

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapterConfigurer"
    init-method="init">

    <property name="messageConverters">
        <list>
            <bean id="marshallingHttpMessageConverter"
                class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"
          >
          <property name="objectMapper" ref="jacksonObjectMapper" />
          </bean>
        </list>
    </property>
</bean> 

<bean id="jacksonObjectMapper" class="org.codehaus.jackson.map.ObjectMapper" /> 

I have

  • 杰克逊核心-asl-1.8.5
  • 杰克逊映射器-asl-1.8.5

在我的 /lib 文件夹中

杰克逊负责这样一个简单的案例

public class Simple {
  private int id;

  public int getId() {
    return id;
  }

  public void setId(int id) {
    this.id = id;
  }   
}

@RequestMapping(value = {"/saveSimple.json"},method = RequestMethod.POST)
public ModelMap save(@RequestBody Simple simple,Model model) {
   ...
}

当我用curl测试它时

 curl -v -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"id":1}'  http://<URL>/saveSimple.json

没问题,但如果我用 Hibernate 对象测试它,我会收到消息

415 Unsupported Media Type

有任何想法吗。


StanMax 引领我走向正确的方向......

首先我必须设置@JsonManagedReference and @JsonBackReference正确的。我将 ManagedReference 设置为代表ONE的 的一对多关系,但显然你必须将其设置为MANY属性(集合)

请参阅此处的描述http://wiki.fasterxml.com/JacksonFeatureBiDirReferences http://wiki.fasterxml.com/JacksonFeatureBiDirReferences

@JsonBackReference 是引用的“后”部分:它将在序列化中被省略,并在前向引用的反序列化期间重新构造。

  • 带注释的属性必须是bean类型

我的情况的问题是我没有在 JSON POST 中发送足够的信息来匹配 Hibernate 要求。

这导致了一个异常,即从我的 JSON POST 创建 Hibernate 对象的正确字段不存在。

我创建了一个测试 URL,我自己在其中创建了对象映射器,并尝试手动反序列化 JSON。这会抛出正确的错误消息。

在我看来,Spring 不幸地抛出了 415“不支持的媒体类型”异常,这有点误导。

所以为了未来。首先手动尝试一下(请参阅随附的示例),然后继续。

 ModelMap map = new ModelMap();
 logger.info("HibernateAware");
 HibernateAwareObjectMapper mapper = new HibernateAwareObjectMapper();
 String jsonInput = 
 "{" +
   "\"id\":\"1\"," +
   "\"matCountry\":{" +
     "\"id\":\"1\"" +
   "}" +
 "}";
 Seizure seizure = mapper.readValue(jsonInput, Seizure.class); // this line throw the exception

希望这对某人有帮助。

问候 JS

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring MVC:@ResponseBody,415 不支持的媒体类型 的相关文章

随机推荐

  • Android Studio 中的“应用更改”按钮被禁用(灰色)

    我已将项目的 minSdkVersion 设置为 19 并启用 Instant Run 我已在运行 API 21 的设备中部署了该应用程序 但 应用更改 按钮呈灰色 当我将鼠标悬停在该按钮上时 它显示 No Active App launc
  • 如何禁用 django 中应用程序的一种模型的迁移

    我有一个使用 2 个数据库的应用程序 1 个是默认数据库 另一个是自定义数据库 所以我的模型中有两个使用默认数据库 其他模型使用自定义数据库 我不想在运行 make migrations 命令时迁移自定义数据库模型 请帮忙 您可以通过设置选
  • 使用 NAN 替换强制转换非数字 numpy 数组

    考虑数组 x np array 1 2 a 绑定转换为浮点数组会引发异常 x astype np float ValueError could not convert string to float a numpy 是否提供任何有效的方法将
  • scala案例类问题

    我有两个关于 案例类的问题 可以用作 case head tail gt 它是如何工作的 意思是 Scala 用于将 List 实例与 case 类进行匹配的流程到底是什么 鉴于我有一个类 MyClass 带有运算符 op 我可以创建一个名
  • AWS ECS架构

    我有一个 React 前端和 Flask 后端 我想用 ECS 部署它们 我想让反应应用程序面向公众 并将烧瓶服务器隐藏起来 无法从外界访问 根据我的阅读 该方法应该如下 为 Flask 服务器创建公共子网和私有子网 并在公共子网上创建 N
  • 如何使用 kubectl 列出 kubernetes 中应用的自定义资源定义

    我最近应用了这个 CRD 文件 https raw githubusercontent com jetstack cert manager release 0 11 deploy manifests 00 crds yaml With ku
  • 类成员函数的 std::bind

    我有这个代码 include
  • 有什么方法可以判断我的 iPhone 应用程序在运行时是否在调试器下运行?

    如果我的错误处理代码在调试器下运行 我希望它的行为有所不同 具体来说 如果我在手机上运行 未连接到调试器并且断言失败 我想将错误发送到我的服务器 当我在gdb下时 我想闯入调试器 虽然我可以想象苹果将如何编写代码 但我找不到任何关于测试调试
  • MVC 3 保持短网址

    我有 MVC3 应用程序 我想在其中保留短 URL 最好的或干净的方法是什么 假设我有两个控制器 帐户和主页 我在帐户控制器中拥有所有与帐户相关的任务登录 注销 配置文件 常见问题解答等 家庭控制器中的所有主要任务 如任务 A 任务 B 和
  • 未找到 GnuTLS Libnetttle 3.4

    当我尝试配置 GnuTLS 时 收到错误消息 未找到 Libnetttle 3 4 我安装了 nettle 3 4 1 1 库文件位于 usr lib 中 即使我指定了环境变量NETTLE LIBS直接地 export NETTLE LIB
  • 当主干/分支/标签结构混乱时,如何从 Subversion 迁移到 Mercurial?

    我想将存储库从 Subversion 转换为 Mercurial 但是当我最初设置存储库时 我以最懒的方式完成了它 随着时间的推移 该结构不断变形和恶化 此时已有 5 年历史 尽管如此 我还是想保留尽可能多的历史 即使我必须弄脏并手动将东西
  • codecept:未找到命令

    我全新安装了 Ubuntu 在安装 Yii2 等之后 我似乎无法再运行 codecept 了 我用的是Yii2 我需要在composer json 中使用最新的codecept 版本 该版本工作正常 但我似乎找不到一种方法来让代码接收再次运
  • WPF INotifyPropertyChanged 如何工作?

    这是在 WPF C 中使用绑定的典型 INotifyPropertyChanged 实现 namespace notifications ViewModel class MainViewModel INotifyPropertyChange
  • Powershell - 解析 PSDrive 别名之外的路径

    我有一个很长的路径名 我为其创建了一个 PS 驱动器 new psdrive name blah psprovider filesystem root c foo bar bizz bazz grozz grizz blah blow 我需
  • date_helper 格式的默认值

    尽管听起来很基本 但我无法将 date helper 默认为日期 如下所示 semantic form for resource do f f inputs do f input issued on default gt Date toda
  • 如何并行从数组中删除零值

    如何使用 CUDA 并行有效地从数组中删除零值 有关零值数量的信息是预先可用的 这应该可以简化这项任务 重要的是数字必须保持源数组中的顺序 当被复制到结果数组时 Example 该数组将例如包含以下值 0 0 19 7 0 3 5 0 0
  • “url”、“src”和“href”之间的区别[重复]

    这个问题在这里已经有答案了 可能的重复 SRC 和 HREF 之间的区别 https stackoverflow com questions 3395359 difference between src and href 当编写 html
  • 位图文件头大小

    我是 bmp 文件编程的新手 我检查了这个网站以了解 bmp 标头 http www daubnet com en file format bmp http www daubnet com en file format bmp bmp 文件
  • 如何调用 UItableview 委托方法。当tableview处于“for”循环中时?

    我正在创建表格视图for loop 循环一次后 需要调用表视图委托 数据源方法 但这里方法 委托 数据源 在完成循环后调用 Note 我正在基于页面的滚动视图中显示所有表格 控制器 这是我的代码 for int i 0 i lt 10 i
  • Spring MVC:@ResponseBody,415 不支持的媒体类型

    我在将 JSON Post 映射到特定 Java 对象以通过以下方式保存时遇到问题休眠 Ajax 调用的标头设置正确 Accept application json Content Type application json charset