当前位置: 首页 > 知识库问答 >
问题:

编写控制器的正确方法

路阳华
2023-03-14
    null

现在的问题是:

>

  • 作为控制器方法执行的结果,我将返回对象的映射,该映射将解析为JSON。可能的实体是:

    {“结果”:“12”}

    我应该如何提供基于结果的附加消息?我能想到两个解决办法:

    >

  • 返回映射,该映射在肯定验证结果的情况下具有result=true,在否定验证结果的情况下具有result=false,以及带有相应消息的errorCode
  • 返回指示验证结果的布尔值,并另外对否定结果使用异常。(加分问题,在这样的场景中,该异常是勾选还是取消勾选?)

  • 共有1个答案

    邓德厚
    2023-03-14

    Spring支持自定义验证。有一个注释@valid。您可以在Controller中的参数之前添加它。我会在例子上展示。首先,创建具有implements Validator接口的类:

    @Component
    public class MathValidator implements Validator {
    
        @Override
        public boolean supports(Class<?> aClass) {
            return MatchRequest.class.equals(aClass);
        }
    
        @Override
        public void validate(Object o, Errors errors) {
            MatchRequest request = (MatchRequest) o;
    
            if (request.getValue() == null) {
                errors.rejectValue("value", "Value cannot be empty");
            }
           //add another validation logic here.
        }
    }
    

    然后,您可以在控制器中注入验证器,如下所示:

    @Autowired
    private MathValidator validator;
    

    并将此方法与注释一起添加,以显示spring应该验证哪个表单。Name in annotation是controller方法中参数的名称。

    @InitBinder("request")
    private void initBinder(WebDataBinder binder) {
        binder.setValidator(routeValidator);
    }
    
    @RequestMapping(value = "/math", method = RequestMethod.POST)
            public ResponseEntity calculate(@RequestBody @Valid MatchRequest request, BindingResult result) {
                if (result.hasErrors()) {
                    return new ResponseEntity(result.getAllErrors(), HttpStatus.BAD_GATEWAY);
                }
    
                //call service,etc.
            }  
    
     类似资料:
    • 本文向大家介绍AngularJS控制器controller正确的通信的方法,包括了AngularJS控制器controller正确的通信的方法的使用技巧和注意事项,需要的朋友参考一下 AngularJS是一款非常强大的前端MVC框架,AngularJS中的controller是个函数,用来向视图的作用域($scope)添加额外的功能,我们用它来给作用域对象设置初始状态,并添加自定义行为。 当我们在

    • 本文向大家介绍Node.js插件的正确编写方式,包括了Node.js插件的正确编写方式的使用技巧和注意事项,需要的朋友参考一下 Node.js在利用JavaScript编写后端方面效果拔群,值得我们多加尝试。不过如果大家需要一些无法直接使用的功能甚至是根本无从实现的模块使用,那么能否从C/C++库当中引入此类成果呢?答案是肯定的,大家要做的就是编写一款插件,并借此在自己的JavaScript代码中

    • 问题内容: 假设我要编写以下HQL查询: 将其编写为参数化查询的正确方法是什么,例如 问题答案: 我不确定如何使用位置参数来执行此操作,但是如果可以使用命名参数而不是位置参数,则可以将命名参数放在方括号内,并且可以使用Query接口中的setParameterList方法将值列表绑定到此参数。

    • 问题内容: 如何正确构造一个循环以确保以下的 promise调用 和链接的 logger.log(res) 通过迭代同步运行? 尽管它似乎有效,但是我认为它不能保证调用 logger.log(res); 的顺序 。 有什么建议? 问题答案: 我不认为这可以保证调用logger.log(res)的顺序; 实际上,确实如此。该语句在调用之前执行。 有什么建议? 很多。最重要的是您使用手动创建承诺反模式

    • 问题内容: 什么是关闭Java中嵌套流的最佳,最全面的方法?例如,考虑设置: 我知道需要对关闭操作进行保险(可能通过使用finally子句)。我想知道的是,是否有必要明确确保嵌套流已关闭,还是足以确保关闭外部流(oos)? 我注意到的一件事,至少在处理此特定示例时,是内部流似乎只抛出FileNotFoundExceptions。这似乎暗示着从技术上讲,如果它们失败了,就不必担心将其关闭。 这是一位

    • 问题内容: 我在一些帖子中看到人们在编写动态HTML时不喜欢在javascript中使用。 为什么是这样?什么是 正确的 方法是什么? 问题答案: 仅在最初解析页面和创建DOM时才起作用。浏览器到达结束标记并且DOM准备就绪后,就不能再使用了。 我不会说使用是正确的还是不正确的,这仅取决于您的情况。在某些情况下,您只需要完成任务即可。查看如何将Google Analytics(分析)注入大多数网站