@RequestParams用于自定义对象类型 - 参数名称

时间:2017-01-28 01:27:03

标签: java spring spring-mvc spring-boot

我在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手动测试)。验证实际的参数是很好的。

1 个答案:

答案 0 :(得分:0)

您正在寻找的是JavaBeans约定,它们会查看您的类的公共API。您的类具有名为beefchicken属性,相应的方法为get / set(或is布尔人。)

JavaBeans约定并不关心如何存储属性 - 甚至很可能根本不存储该属性(例如,isEmpty())。

对于较大的问题,当输入是一些连贯的整体(例如表单)时,会使用@ModelAttribute(或@RequestBody)。您可能拥有UserRegistrationForm的用户名,名/姓,电子邮件地址,密码......当参数更松散相关时使用@RequestParam,例如搜索的各种参数。< / p>