当前位置: 首页 > 知识库问答 >
问题:

Spring REST@刚体总是空的

朱翔
2023-03-14

所以在我修复了'415媒体不支持'错误(415媒体不支持)之后,我遇到了一个新问题。我的请求体总是空的。当我通过ChromePostMan发送请求时,我总是得到一个只有空值的序列化实体。我正在使用Spring(4.2.3.在我的项目中发布)jackson-数据库(2.6.3)jackson-core(2.6.3)。我在我的项目中使用基于注释的配置(@EnableWebMvc使Spring自动发现HTTPMessageConverters)。

其他职位

我知道stackoverflow上的其他帖子,几乎有同样的问题。然而,他们没有给我一个答案。此外,大多数帖子都是针对较旧的Spring版本(4.0之前),所以现在有些事情已经完全不同了。

类似职位:

@Spring身体总是空的

在POST上提供空字符串

使用HttpServletRequest请求

Spring控制器

在我的Spring@RestController中,我有以下代码:

@RequestMapping(value = "/location/update/{id}", method = RequestMethod.PUT)
public UserLocation updateUserLocation(@PathVariable("id") int id, UserLocation user) {        
        return user;        
}

我使用一个单独的模型类(UserLocation)进行数据绑定。这是因为这样我可以更好地控制API发送和接收的数据。

数据库类

UserLocation类由3个属性组成,其中包含一个构造函数以及所需的getter和setter。(我可以公开这些属性,但我首先要解决这个问题)。

public class UserLocation {

    private Float latitude;

    private Float longitude;

    private Date lastActive;
}

JSON正文

通过AngularJS Ajax调用($http.PUT),我使用以下数据调用spring控制器:

 {
    "latitude": 52.899370,
    "longitude": 5.804548,
    "lastActive": 1449052628407
 }

邮递员要求

我正在开发一个Cordova应用程序,所以为了测试请求而不需要将我的应用程序构建到我的手机上,我使用了Chrome PostMan插件。

我打以下电话:

超文本传输协议

方法:PUT

内容类型:应用程序/json

正文:

{
    "latitude": 52.899370,
    "longitude": 5.804548,
    "timestamp": 1449052628407
}

请求结果

通过请求,我得到以下结果:

{"latitude":null,"longitude":null,"lastActive":null}

这意味着Spring确实为我的UserPlace类创建了一个新实例,但是它没有用正文中的数据填充它。

Spring PUT方法

在Spring控制器中使用PUT方法时,实体不是立即更新吗?这意味着控制器中没有额外的逻辑来更新实体,对吗?(如果实体当然是Hibernate/JPA模型,可以更新)。

我似乎搞不清楚这个问题。有人知道我做错了什么吗?

最新消息

向我的控制器代码添加@刚体

@RequestMapping(value = "/location/update/{id}", method = RequestMethod.PUT)
public UserLocation updateUserLocation(@PathVariable("id") int id, @RequestBody UserLocation user) {        
            return user;        
}

让我回到我的原始问题(415媒体不受支持)。添加此项会引发415媒体不受支持的错误,我似乎无法修复。

固定的下面的解决方案

共有2个答案

阎昌勋
2023-03-14

问题是您没有用@RequestBody

..updateUserLocation(@PathVariable("id") int id, @RequestBody UserLocation user)

还要确保为用户位置变量生成getterssetters

葛言
2023-03-14

我在控制器中没有看到UserLocation对象的@RequestBody?还要确保属性具有getter和setter。

public UserLocation updateUserLocation(@PathVariable("id") int id, UserLocation user) {        

在执行HTTP PUT时,您必须添加额外的逻辑以将对象持久化到数据库。您需要调用DAO或存储库来持久化对象。通常,将传入的UserLocation对象映射到持久化的真实JPA/Hibernate实体。这不会自动发生。

 类似资料:
  • 流氓和静态刚体 一般当我们创建一个刚体并将它添加到空间上后,空间就开始对之进行模拟,包括了对刚体位置、速度、受力以及重力影响等的模拟。没被添加到空间(没有被模拟)的刚体我们把它称之为流氓刚体。流氓刚体最重要的用途就是用来当作静态刚体,但是你仍然可以使用它来实现如移动平台这样的直接受控物体。 内存管理函数 cpBody *cpBodyAlloc(void) cpBody *cpBodyInit(cp

  • 我正在使用Spring4开发一个RESTful应用程序。我想处理当一个POST请求不包含正文时的情况。我编写了以下自定义异常处理程序: 当它收到一个没有正文的POST时,这些方法不会被调用。相反,客户端得到一个带有400个坏请求HTTP状态和空正文的响应。有人知道怎么处理吗?

  • 刚体是组成物理世界的基本对象,可以让一个节点受到物理影响并产生反应。该组件在使用 Builtin 物理引擎时无效。 点击 属性检查器 下方的 添加组件 -> 物理组件 -> Rigid Body 3D,即可添加刚体组件到节点上。 刚体属性 属性 功能说明 Mass 刚体的质量 Linear Damping 线性阻尼,用于减小刚体的线性速率,值越大物体移动越慢 Angular Damping 角阻尼

  • 刚体是组成物理世界的基本对象,你可以将刚体想象成一个你不能看到(绘制)也不能摸到(碰撞)的带有属性的物体。 刚体属性 质量 刚体的质量是通过碰撞组件的 密度 与 大小 自动计算得到的。 当你需要计算物体应该受到多大的力时可能需要使用到这个属性。 var mass = rigidbody.getMass(); 移动速度 // 获取移动速度 var velocity = rigidbody.line

  • 获取刚体组件 TypeScript的代码示例:const rigidBody = this.getComponent(RigidBody); 刚体类型 刚体一般分为三种类型,static,dynamic,kinematic. static,表示静态刚体,犹如质量巨大无比的石头,具体为质量为0的,或者只有碰撞组件的物理元素。 dynamic,表示动力学刚体,能够受到力的作用,具体为质量大于0并且is

  • 我有一个模型类和一个控制器。我在post man的正文中发布json类型的数据。但每次我都会收到一个不受支持的媒体类型415错误。这是我的模型课: 我的控制器是: 我已经用HttpServletRequest代替@RequestBody,它起到了作用。但为什么在我使用@RequestBody时它不工作呢? 这是邮递员的快照。这是邮递员请求的图片 这是请求中使用的标题的屏幕截图