如何使用Restful api在Spring中自动修剪bean对象的字符串?

bha*_*ore 6 java rest spring

我想自动修剪所有表单字符串字段修剪(仅限尾随和前导空格)

假设我通过FirstName ="robert"预期:"robert"

控制器类具有以下代码:

@InitBinder
public void initBinder ( WebDataBinder binder )
{
    StringTrimmerEditor stringtrimmer = new StringTrimmerEditor(true);  
    binder.registerCustomEditor(String.class, stringtrimmer);
}

@RequestMapping(value = "/createuser", method = RequestMethod.POST)
public Boolean createUser(@RequestBody  UserAddUpdateParam userAddUpdateParam) throws Exception {

    return userFacade.createUser(userAddUpdateParam);
}  
Run Code Online (Sandbox Code Playgroud)

当我调试代码时,它进入@InitBinder而不是修剪bean类字符串字段.

小智 8

要将此功能添加到在 post 中提交并在 RequestBody 中接收的所有 JSON,您可以使用以下 WebMvcConfigurer。

    import java.util.List;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.http.converter.HttpMessageConverter;
    import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    import com.fasterxml.jackson.databind.DeserializationFeature;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.fasterxml.jackson.databind.module.SimpleModule;

    @Configuration
    public class HttpMessageConvertor implements WebMvcConfigurer {

    @Override
    public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.add(mappingJackson2HttpMessageConverter());
    }

    @Bean
    public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        ObjectMapper mapper = new ObjectMapper();
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

        SimpleModule module = new SimpleModule();
        module.addDeserializer(String.class, new StringWithoutSpaceDeserializer(String.class));
        mapper.registerModule(module);

        converter.setObjectMapper(mapper);

        return converter;
    }
}
Run Code Online (Sandbox Code Playgroud)

StringWithoutSpaceDeserializer 类为:

import java.io.IOException;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;

public class StringWithoutSpaceDeserializer extends StdDeserializer<String> {
    /**
     * 
     */
    private static final long serialVersionUID = -6972065572263950443L;

    protected StringWithoutSpaceDeserializer(Class<String> vc) {
        super(vc);
    }

    @Override
    public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
        return p.getText() != null ? p.getText().trim() : null;
    }
}
Run Code Online (Sandbox Code Playgroud)


mlg*_*mlg 4

该注释@InitBinder不能与 一起使用@RequestBody,您必须将其与@ModelAttribute注释一起使用

您可以在 Spring 文档中找到更多信息:

https://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html