Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何隐藏@RequestMapping参数?_Java_Spring_Spring Mvc_Jackson - Fatal编程技术网

Java 如何隐藏@RequestMapping参数?

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配置为忽略模型类的某些属性

我有一个带有参数bean的Servlet。bean有一些字段,用户get查询不应该覆盖这些字段

我怎样才能做到呢

以下各项均无效:

@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();
        }
    });
}