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

@RequestBody在Spring总是空的

苏晓博
2023-03-14

对于下面的方法,JSONObject总是为空。

 @RequestMapping(value = "/package/{id}", method = RequestMethod.PUT)
@ResponseStatus(HttpStatus.OK)
@ResponseBody
public SPackage updatePackage(@PathVariable String id, @RequestBody JSONObject   
 sPackage) {
}

我的ajax是这样的。我的方法得到的对象作为空地图在服务器端

   var jsonObject= {"customerName":$('#customerName').val()}
     var jsonData = JSON.stringify(jsonObject);  
            $.ajax({ 
                type: "PUT",
                url: "http://localhost:8081/someproj/package/" + $('#id').val(),
                dataType: "json",
                data: jsonData,
                async: false,                                               
                contentType: "application/json; charset=utf-8",
                beforeSend : function() { 
                    openModal();
                },
                success: function(data) { 
                    closeModal();
                $('#success').show();
                 console.log(data);
                }
            }); 

共有3个答案

柯甫
2023-03-14

您可以使用以下解决方法:

@RequestBody Map<String, String> json

这样,您可以继续使用Jackson HttpMessageConzer,并在有效载荷中处理自定义对象。

您可以在这里的答案中查看为什么会发生这种情况的扩展解释

@recestBody在发出POST请求时给出空的JsonObject

令狐建修
2023-03-14

您确定Spring代码中没有出现异常吗。在Spring中将JSON转换为自定义对象时,需要指定具有相同字段的自定义类

在您的情况下,您可以这样定义POJO:

public class MyRequestObj {
    private String customerName;
    // add more fields for any other keys from JSON
}

并将其放入控制器类:

@RequestMapping(value = "/package/{id}", method = RequestMethod.PUT)
@ResponseStatus(HttpStatus.OK)
@ResponseBody
public SPackage updatePackage(@PathVariable String id, @RequestBody MyRequestObj   
 myRequestObj) {
    String customerName = myRequestObj.getCustomerName();
}

当然,如果您只想将客户名称作为字符串传递给控制器,那么您还可以将其作为查询字符串(append?customerName=someCustomer)传递,并在Spring中检索它,如下所示:

@RequestMapping(value = "/package/{id}", method = RequestMethod.PUT)
@ResponseStatus(HttpStatus.OK)
@ResponseBody
public SPackage updatePackage(@PathVariable String id, @RequestParam("customerName") String customerName) {
} 
隗昀
2023-03-14

我猜spring不知道如何将json转换为JSONObject,最好是接受一个与json结构相似的POJO对象,

@RequestMapping(value = "/package/{id}", method = RequestMethod.PUT)
@ResponseStatus(HttpStatus.OK)
@ResponseBody
public SPackage updatePackage(@PathVariable String id, @RequestBody YourJsonPOJO   
 sPackage) {
}

 类似资料:
  • 所以在我修复了'415媒体不支持'错误(415媒体不支持)之后,我遇到了一个新问题。我的请求体总是空的。当我通过ChromePostMan发送请求时,我总是得到一个只有空值的序列化实体。我正在使用,和。我在我的项目中使用基于注释的配置(使Spring自动发现)。 其他职位 我知道stackoverflow上的其他帖子,几乎有同样的问题。然而,他们没有给我一个答案。此外,大多数帖子都是针对较旧的Sp

  • 我创建了一个简单的REST服务(POST)。但是当我从postman@RequestBody调用这个服务时,它没有收到任何值。 我的java Bean对象如下: System.out.println将null打印为PolcyNumber的值。 请帮我解决这个问题。 我在请求体中传递的JSON是 我甚至在postman中设置了到

  • 我的应用程序中有一个接受日志的控制器。当我发送一个空的json对象(“{}”)或有效请求,但有一个或多个空字段时,它会自动反序列化为一个空的LogDTO对象或一个字段设置为0(对于数字字段)的LogDTO。我想拒绝字段为空的请求。 我的控制器: LogDTO对象: 我也尝试在我的应用程序属性中设置“spring.jackson.default-属性-包含=非默认”,但它一直将字段设置为“0”。有什

  • 我在使用Discord。js和一个长时间运行的Discord bot最近由于消息而突然停止工作。成员对象始终为空。 例如: 这始终会产生:TypeError:无法读取null的属性“roles” 在我们查看消息的代码库中,这种错误也随处可见。成员 即使控制台完全记录消息对象,我们也可以肯定地看到成员属性为空。 Discord.js?有什么变化吗?

  • 使用Spring Boot1.4和Spring Data Rest/MVC,我无法使@valid@requestbody工作。我已经尝试了多个版本的Hibernate验证器,声明验证器bean等。 MyPojo包含各种验证注释,例如@digits、@notnull等。当调用repostiory.save方法但Spring没有尝试对POJO进行任何验证时,我实际上看到了验证器异常。 更新 当试图将实

  • 我们正在尝试建立springfox:swagger用户界面。但是,当使用值使用post方法创建restcontroller时。对于不可变接口,示例显示的是,模型显示的是接口名称,而不是其他名称。 我注意到,当我使用不可变类作为请求体时,示例显示了它的所有属性。我尝试在接口上添加子类型和父配置,但没有改变任何东西 这是我们不变的界面: 我们的映射: 我们的objectmapper: 我们的招摇过市配