zoukankan      html  css  js  c++  java
  • Spring API后端原理及最佳实践

    少用查询字符串,使用路径变量获取参数

    @GetMapping("/api/user/query/{uid}")
    fun queryUser(@PathVariable uid: Int): UserEntity {
        return ...by uid
    }
    

    消息转换器

    HttpMessageConverter支持对@RequestBody以及@ResponseBody注解的方法的返回值进行处理。
    因此有最常用的两种消息转换器:StringHttpMessageConverterMappingJackson2HttpMessageConverterByteArrayHttpMessageConverter也有用武之地。
    对了,别忘了重写内容协商,设置Content-Type默认值:

    @EnableWebMvc
    @ComponentScan(basePackages = ["ctrl"])
    class WebConfig : WebMvcConfigurer {
        override fun configureContentNegotiation(configurer: ContentNegotiationConfigurer) {
            // 设置Content-Type默认值
            configurer.defaultContentType(MediaType.APPLICATION_JSON)
        }
    }
    

    Jackson

    SpringMVC在处理Controller方法参数时使用了Spring的参数绑定和类型转换机制,且对于处理以JSON数据格式的请求和响应(@RequestBody和@ResponseBody)采用Jackson来进行序列化和反序列化操作。

    override WebMvcConfigurer.configureMessageConverters()
            // Jackson消息转换器
            converters.add(MappingJackson2HttpMessageConverter().apply {
                objectMapper.configure(SerializationFeature.INDENT_OUTPUT, true)
                objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
                log.d("Jackson消息转换器就绪", supportedMediaTypes)
            })
    

    使用HashMap获取POST请求体中的json键值对

    HashMap<String, String>是常见的类型,HashMap<Any, Any>的兼容性更高。

    参数校验

    与其让校验逻辑弄乱我们的处理器方法,还不如使用Spring对Java校验API(Java Validation API,又称JSR-303)的支持。从Spring 3.0开始,在Spring MVC中提供了对Java校验API的支持。
    在Spring MVC中要使用Java校验API的话,并不需要什么额外的配置。只要保证在类路径下包含这个Java API的实现即可,比如Hibernate Validator。

    Java校验API定义了多个注解,这些注解可以放到属性上,从而限制这些属性的值。所有的注解都位于javax.validation.constraints包中。
    对应参数添加@Valid注解即可启用验证,如果有校验出现错误的话,那么这些错误可以通过该参数之后声明的Errors对象进行访问,Errors参数必须要紧跟在带有@Valid注解的参数后面,一般来说方法所做的第一件事就是调用Errors.hasErrors()来检查是否有错误。

  • 相关阅读:
    把Chrome浏览器变成文本编辑器
    pigcms 标签读不出
    全排列函数
    线性基(二
    线性基(一
    fabs() abs()
    字面量声明的函数,后边最好加一个分号,否则的话,在控制台执行有问题的
    mongo集群
    linux的查找命令
    mysql 解决Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’错误
  • 原文地址:https://www.cnblogs.com/develon/p/12733365.html
Copyright © 2011-2022 走看看