我在SpringBoot中管理的Spring Controller就是这样定义的。
我想传入一个完整的对象,而不是重复MyCustomObject
的所有字段来保存一些输入。
@ResponseBody
@RequestMapping(value = "add", method = RequestMethod.POST)
public ResponseEntity<?> add(@ModelAttribute MyCustomObject myObj) { }
在测试请求方法时,我不确定各个请求参数名称是什么。我会有直接的字段名称。我的命名惯例是放置&#39; m&#39;作为前缀。
事实证明,Spring决定使用试验和错误设置的请求参数没有m
,例如&#39;鸡&#39;而不是'chicken&#39;。我想知道控制它的是什么。也许它使用了set / get方法名称,只是在那里砍掉了get / set前缀?
另外,我想知道以这种方式使用@ModelAttribute是否正确。我不确定开发前端的人会在这里做什么,如果他们看看我的弹簧控制器,或者其他发布REST api的东西。拥有各个参数可能更好,而不是在那里拥有完整的@ModelAttribute。但是,它确实为我节省了一些努力,试图从各个参数中以编程方式创建对象。
@Entity
@Table(name = "my_stuff")
@Access(AccessType.FIELD)
@XmlAccessorType(XmlAccessType.FIELD)
public class MyCustomObject{
private String mBeef;
private String mChicken;
public String getBeef() {}
public void setBeef(String beef);
public String getChicken() {}
public void setChicken(String chicken);
}
Spring Boot中是否有办法在服务器上查看REST API(使用gradlew bootRun手动测试)。验证实际的参数是很好的。
答案 0 :(得分:0)
您正在寻找的是JavaBeans约定,它们会查看您的类的公共API。您的类具有名为beef
和chicken
的属性,相应的方法为get
/ set
(或is
布尔人。)
JavaBeans约定并不关心如何存储属性 - 甚至很可能根本不存储该属性(例如,isEmpty()
)。
对于较大的问题,当输入是一些连贯的整体(例如表单)时,会使用@ModelAttribute
(或@RequestBody
)。您可能拥有UserRegistrationForm
的用户名,名/姓,电子邮件地址,密码......当参数更松散相关时使用@RequestParam
,例如搜索的各种参数。< / p>