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

Spring RestController映射方法在使用有效的JSON主体发出请求时具有空字段的对象

盛跃
2023-03-14

我正在尝试在我的@RestController上测试我的@PostMap。该控制器如下所示:

@RestController
public class MyTestController
{
    private static final Logger logger = LogManager.getLogger();

    @PostMapping(path = "/foo")
    public String add(@Valid Boo boo, HttpServletRequest request)
    {
        if (LoadManager.insert(request.getRemoteAddr()) < 3)
            try
            {
                BooManager.persist(boo);
                return "1";
            }
            catch (Exception e)
            {
                logger.error(ExceptionUtils.getStackTrace(e));
            }
        return "0";
    }
}

然而,boo当我在add方法中进行调试时发出post请求并查看boo对象时,字段都是空的。

请求正文:

{
    "officialName" : "test",
    "phone" : "test",
    "email" : "test",
    "churchArea" : "test",
    "deanery" : "test",
    "town" : "test",
    "pass" : "test152S56"
}

请求标头Content-Type设置为Application/json

Boo类:

@Data
public class Boo
{
    @Size(max = 1000)
    @NotBlank
    private String officialName;

    @Size(max = 100)
    @NotBlank
    private String phone;

    @Size(max = 100)
    @NotBlank
    private String email;

    @Size(max = 100)
    @NotBlank
    private String churchArea;

    @Size(max = 100)
    @NotBlank
    private String deanery;

    @Size(max = 100)
    @NotBlank
    private String town;

    @Size(max = 1000)
    @NotBlank
    private String pass;
}

@data注释来自lombok,它为该类生成公共getter和setter等。

共有1个答案

李永寿
2023-03-14

当需要将请求主体绑定到方法参数时,应该使用@RequestBody注释。这就是为什么Boo对象属性为空。

@PostMapping(path = "/foo")
public String add(@RequestBody Boo boo, HttpServletRequest request)

文件:https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestBody.html

 类似资料:
  • DBSchema-2表(用户和角色)具有多对多关系,并由postgres中的中间表(用户角色)桥接。我想获取所有角色和创建它的人的姓名。名称在用户表中可用,但所有其他详细信息在角色表中。Roles表中有一个由创建人(创建角色的人的用户id)创建的字段。 我正在尝试构建一个GET请求,以查看给定id的所有角色以及创建id的人的姓名 实体类Users1.java 实体类角色。JAVA 角色。存储库类

  • 我正在使用Hibernate的JPA实现来访问我们的SQL Server 2012数据库。 当尝试在本机查询中选择一个nvarchar字段时,我得到一个异常“没有JDBC类型的方言映射:-9”。 它看起来很像Hibernate 4和SQL Server 2012没有针对JDBC类型-9的方言映射,或者没有针对JDBC类型-9的方言映射,但我在那里找不到适合我的解决方案(两者都不使用JPA)。 我的

  • 我正在使用Spring实现一个RESTful web服务。其中一个endpoint接收JSON字符串作为请求体,我希望将其映射到POJO。然而,现在看来传入的JSON字符串并没有映射到POJO的属性。 这里是@RestController界面 数据模型 最后是我的发帖请求: 与内容类型指定为应用程序/json 但是,当我打印出对象值时,打印出的是默认值(“first”和“last”),而不是我传入

  • 如果我试图反序列化一个JSON字符串,该字符串缺少object类中的一个字段,那么在创建对象时,该字段将被设置为null。当发生这种情况时,我需要Jackson抛出一个异常,这样我就不必在每个对象中实现方法;即JSON字符串输入必须定义了类中的所有字段,或者抛出。 考虑到我的配置,这是可能的吗?

  • 我正在开发一个使用Go的网站,并将其连接到弹性搜索。在弹性搜索中,我可以为索引类型设置动态字段。当我从弹性搜索中读取文档时,它将返回一个JSON对象作为结果,该对象可以包括具有动态名称的字段(或用户定义的字段)。 我可以获取JSON结果并将其解组到Go结构中,但我不知道将这些动态字段作为Go结构的一部分的最佳方法是什么。 这就是我正在做的。例如,如果我从弹性搜索中获得一个联系人的文档,它可能看起来

  • 很抱歉再次问这种问题,但我无法通过查看其他线程和Spring doc来解决我的问题。 我正在使用maven的3.1.0.RELEASE,并尝试使用注释和java配置。 以下是我的web.xml: 这是我的档案web-application-config.xml. 我有两个类。第一个配置视图解析器 第二个定义我的控制器: 根据我的配置,我想一切都应该指向我的home()函数。然而,事实并非如此,以下