Spring MVC 如何告诉Spring排除绑定对象属性?

4xy9mtcn  于 10个月前  发布在  Spring
关注(0)|答案(1)|浏览(79)

我有一个Spring控制器方法,它有两个对象参数:

@GetMapping
public List<Car> getCars(BlueBookCar blueBookCar, AutoTraderCar autoTraderCar)

字符串
BlueBookCarAutoTraderCar都有一个名为id的字段。我希望HTTP GET请求中的查询参数名称id仅绑定到BlueBookCar示例。
例如:

http://localhost/cars?id=123


应该导致blueBookCar具有id等于123。autoTraderCar id应该为空。相反,Spring将两个对象都设置为id为123。
如何告诉Spring排除autoTraderCarid绑定?应该设置其他autoTraderCar字段,这些字段的名称与查询参数名称匹配(Spring通常会这样做)。

更新

我想指出的是:
1.我不希望HTTP客户端知道两种类型的汽车的存在,BlueBookCarAutoTraderCar
1.除了id之外,两种类型的汽车的所有属性都不同。以后其他属性可能会重叠。
1.我不想创建第三个类,因为维护的原因和类之间的关系,从这两个类的属性集。
ASP.NETMVC支持属性绑定排除。请参阅https://stackoverflow.com/a/8332917/1706691。Spring支持这个吗?

p5cysglq

p5cysglq1#

您可以使用@InitBinder,它允许您访问WebDataBinder,以自定义如何将来自http请求的数据绑定到控制器方法中的特定参数对象。
在您的情况下,添加以下内容应该可以解决您的问题:

@Controller
public class CarController {

    @InitBinder("autoTraderCar")
    public void initAutoTraderCarDataBinder(WebDataBinder binder) {
        binder.setDisallowedFields("id");
    }

    @GetMapping
    public List<Car> getCars(BlueBookCar blueBookCar, AutoTraderCar autoTraderCar){

    }

}

字符串

相关问题