javascript - spring请求参数绑定(bind)错误

标签 javascript java spring

@RequestMapping("/query")
@ResponseBody
public ResponseEntity<Content> getByQuery(HttpServletRequest request, ContentQuery query) {
    // Handle request.
}

此代码将用作 ContentQuery 对象的 http 包装器,以便我可以使用来自 javascript 的 http 请求查询内容。 Spring中的自动绑定(bind)将请求参数绑定(bind)到ContentQuery对象上。

问题是,如果有人在请求中放入了一个未知的参数键,ContentQuery 对象仍然被实例化,我不知道如何检查我是否得到了意外的参数。

有什么办法可以解决这个问题吗?

最佳答案

then write your own validator and run it in your controller - docs.spring.io/spring/docs/current/spring-framework-reference/… . Then you can return ResponseEntity with any status you want – freakman

谢谢指教。之前没有使用过 Validator 接口(interface),但它看起来像是一个干净的解决方案。

Controller :

@Autowired
private ContentQueryValidator validator;

@RequestMapping("/query")
@ResponseBody
public ResponseEntity<List<Content>> getByQuery(
        HttpServletRequest request, ContentQuery query, BindingResult result) {
    validator.validate(query, result);
    if(result.hasErrors()){
        return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
    }

    // No errors. Fetch content from service using query object.
}

validator :

@Component
public class ContentQueryValidator implements Validator{
    @Override
    public boolean supports(Class<?> aClass) {
        return ContentQuery.class.equals(aClass);
    }

    @Override
    public void validate(Object obj, Errors errors) {
        ContentQuery query = (ContentQuery) obj;

        List<Integer> contentTemplate = query.getContentTemplate();
        List<Integer> displayTemplate = query.getDisplayTemplate();

        if(contentTemplate == null && displayTemplate == null){
            errors.reject("No query provided");
        }
        // More validation here..
    }
}

关于javascript - spring请求参数绑定(bind)错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31802774/

相关文章:

javascript - 生成子 Node 进程并将其通过管道传输到当前 Node 进程有什么用?

javascript - 拖放的拖动事件与鼠标事件

javascript - JS - 检测 UIwebView

java - retorfit2 如何让这个 json 正确?

spring - 在身份验证回复中添加其他信息

java - Spring-Security:使用自定义身份 validator 和自定义登录页面

javascript - AngularJS:使用指令前置 HTML

java - Maven 上最新版本的 MapReduce 库

java - 使用 Java 从 oracle DB 中保存/检索巨大 blob 的性能问题

java - 在这个例子中,有没有一种方法可以更优雅地操作 Date 对象?