9月22日Spring笔记

标签

java

后端

spring

springMVC

国际化

发布时间:

本文字数:407 字 阅读完需:约 2 分钟

数据转换和校验

SpringMVC通过反射机制对目标处理方法进行解析,将请求消息绑定到处理方法的参数中。

自定义消息转换器

spring-mvc.xml

<!--    开启RequestMapping映射处理器和适配器-->
    <mvc:annotation-driven conversion-service="conversionServiceFactory">
        <mvc:message-converters>
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>text/html;charset=utf-8</value>
                    </list>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"></property>
        <property name="suffix" value=".html"></property>
    </bean>

    <bean id="conversionServiceFactory" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <bean class="com.zr.converter.UserConverter"></bean>
            </set>
        </property>
    </bean>

UserConverter.java

package com.zr.converter;

import com.zr.vo.User;
import org.springframework.core.convert.converter.Converter;


public class UserConverter implements Converter<String, User> {

    @Override
    public User convert(String source) {
        User user = new User();
        String[] data = source.split("-");
        user.setUserId(data[0]);
        user.setUserName(data[1]);
        return user;
    }
}

UserController.java

   @RequestMapping("/converter.action")
    public void converter(@RequestParam("data") User user){
        System.out.println(user);
    }

效果:传入key为data的属性,其值将被转换为User类,转换规则见UserConverter.java

数据的后台校验

JSR 303是Java为Bean数据合法性校验提供的标准框架,它已经包含在 JavaEE6.0中;
JSR 303通过在 Bean 属性上标注类似于@NotNull、@Max等标准的注解指定校验规则,并通过标准的验证接口对 Bean进行验证;

校验示例

导入hibernate jar包,在对象类上加相应的注解,在controller层使用@Validated注解

pom.xml

    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-validator</artifactId>
      <version>6.1.0.Final</version>
    </dependency>

User.java

public class User {

    @NotEmpty(message = "用户账号不能为空")
    private String userId;

    private String userName;
    @NotEmpty(message = "密码不能为空")
    private String password;
}

UserController.java

    @ResponseBody
    @PostMapping(value = "login.action", consumes = {"application/x-www-form-urlencoded"})
    // @Validated 注解,必须和Errors配合使用
    public String login(@Validated User user, Errors errors){
        if(errors.hasFieldErrors()){
            return JSON.toJSONString(AjaxResult.fail(200,errors.getFieldError().getDefaultMessage(), null));
        }
        User u = new User();
        u.setUserId(user.getUserId());
        u.setPassword(Md5Util.md5(user.getPassword()));
        AjaxResult robj = userService.login(u);
        return JSON.toJSONString(robj);
    }

国际化

message.properties 默认 message_zh_CN 中文中国

biz.query.success=默认:查询成功{0}

0为占位符

UserController.java

    @Autowired
    private ResourceBundleMessageSource messageSource;

    @ResponseBody
    @PostMapping("/getUserList.action")
    public String getUserList(Locale locale){
        AjaxResult robj = userService.getList();
        if(robj.isSuccess()){
            robj.setMessage(messageSource.getMessage("biz.query.success",new Object[]{"!"}, locale));
            // {"!"}替换properties文件中的占位符{0}
        }
        String str = JSON.toJSONString(robj);

        return str;
    }

spring-mvc.xml

<!--    国际化-->
    <bean class="org.springframework.context.support.ResourceBundleMessageSource">
        <property name="basename" value="message"></property>
        <property name="useCodeAsDefaultMessage" value="true"></property>
    </bean>