Herim_Vane 2014-11-12 09:16 采纳率: 0%
浏览 713

springmvc中参数传递问题

有一个多选select提交数据到springmvc select的name=artisticIdentities

接收端代码
@RequestMapping("/add.action")
@ResponseBody
public JsonResult addArtist(Artist a)
其中a中包含String字段artisticIdentities

post提交参数查看为
artisticIdentities:"bb"
artisticIdentities:"cc"

然后springmvc直接将两个参数封装到字段artisticIdentities=bb,cc
请问有没有人知道这其中的缘由

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-03 02:25
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在Spring MVC中,当使用@RequestParam注解来处理HTTP POST请求时,Spring会将所有请求体中的键值对(即URL参数)映射到控制器方法的输入参数上。这些参数可以是基本类型(例如字符串、整数或布尔值),也可以是复杂对象。

    在这个例子中,你设置了一个名为artisticIdentities的属性,并将其默认值设为了一个空字符串(""")。这意味着当你尝试POST提交数据时,如果artisticIdentities字段为空,则不会被设置任何值。但是,如果你发送了包含artisticIdentities字段的数据,那么它会被自动赋值为你设置的默认值。

    所以,如果你发送了包含artisticIdentities字段的数据,那么这个字段就会被设置为你的默认值,即使你在控制器方法的参数中没有提供相应的值。这正是Spring MVC所做的事情,因为它需要根据实际收到的参数来填充属性的值。

    要解决这个问题,你可以考虑以下几种方法:

    1. 设置一个默认值:确保在创建Artist实体类时设置了默认值。
    2. 使用Optional<String>:使用Optional<String>来包装传入的artisticIdentities字段,这样就可以检查其是否为空或者是否已经设置默认值。
    3. 使用Spring Data JPA的@Column注解:如果你正在使用JPA,你可以将artisticIdentities设置为@Column(name = "artistic_identities"),这样Spring就不会将默认值设置到属性上。
    @Entity
    public class Artist {
    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
    
        // other fields...
    
        @Column(name = "artistic_identities")
        private String artisticIdentities;
    }
    

    希望这些信息能帮助你解决问题!

    评论

报告相同问题?