Java 如何隐藏@RequestMapping参数?
我有一个带有参数bean的Servlet。bean有一些字段,用户get查询不应该覆盖这些字段 我怎样才能做到呢 以下各项均无效:Java 如何隐藏@RequestMapping参数?,java,spring,spring-mvc,jackson,Java,Spring,Spring Mvc,Jackson,我有一个带有参数bean的Servlet。bean有一些字段,用户get查询不应该覆盖这些字段 我怎样才能做到呢 以下各项均无效: @JsonIgnore @XmlTransient @JsonIgnoreProperties private String somefield; 运行: 这将直接改变属性。我如何告诉spring跳过该属性 或者更好:当用户试图更改不允许的属性时,让spring拒绝请求?如果servlet的意思是controller,则可以将binder配置为忽略模型类的某些属性
@JsonIgnore
@XmlTransient
@JsonIgnoreProperties
private String somefield;
运行:
这将直接改变属性。我如何告诉spring跳过该属性
或者更好:当用户试图更改不允许的属性时,让spring拒绝请求?如果servlet的意思是controller,则可以将binder配置为忽略模型类的某些属性:
@RestController
public class MyServlet {
@InitBinder
private void initBinder(WebDataBinder binder) {
binder.setDisallowedFields("somefield");
}
@GetMapping("/myservlet")
public String myservlet(Model model) {
return model.toString();
}
}
型号:
public class Model {
private String somefield;
private String property2;
//getters and setters
}
另一种方法是从模型类中删除被忽略的属性设置器。在这种情况下,spring将无法设置该值
如果servlet的意思是servlet,那么只需包装请求,而不忽略getParameterMap()
调用中的属性
更新
如果您想在设置了不合适的属性时强制spring拒绝整个请求,那么您可以为这个属性注册一个自定义属性编辑器,并在setValue方法中抛出一个异常。像这样:
@InitBinder
private void initBinder(WebDataBinder binder) {
// binder.setDisallowedFields("property1");
binder.registerCustomEditor(String.class, "somefield", new PropertyEditorSupport() {
@Override
public void setValue(Object value) {
throw new IllegalStateException();
}
});
}
另一种方法是在
Model
类的属性setter中抛出异常。Spring然后捕获它,封装到它自己的org.springframework.validation.BindException
中,并返回400个错误请求
您是否考虑过将其声明为final
?我正在用注入的@Value
参数中的值覆盖类外的那些字段。所以不能让它们在请求中成为最终的。啊,好的,我看到了。请看下面的链接,这可能会对您有所帮助。可以忽略参数。但如果有人试图通过get查询设置这些参数,是否有可能抛出异常?
@InitBinder
private void initBinder(WebDataBinder binder) {
// binder.setDisallowedFields("property1");
binder.registerCustomEditor(String.class, "somefield", new PropertyEditorSupport() {
@Override
public void setValue(Object value) {
throw new IllegalStateException();
}
});
}