1.用@ControllerAdvice处理
package com.wangzs.handler;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.deser.std.StdScalarDeserializer;
import org.springframework.beans.propertyeditors.StringTrimmerEditor;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.InitBinder;
import java.io.IOException;
/**
* description
*/
@ControllerAdvice(basePackages = {"com.wangzs.controller"})
public class GlobalAdvice {
/**
* 去除get方式的参数空格
*
* @param binder
*/
@InitBinder
public void initBinder(WebDataBinder binder) {
// 创建 String trim 编辑器
// 构造方法中 boolean 参数含义为如果是空白字符串,是否转换为null
// 即如果为true,那么 " " 会被转换为 null,否者为 ""
StringTrimmerEditor propertyEditor = new StringTrimmerEditor(false);
// 为 String 类对象注册编辑器
binder.registerCustomEditor(String.class, propertyEditor);
}
/**
* 去除post requestBody实体中的空格
*
* @return
*/
@Bean
public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
return new Jackson2ObjectMapperBuilderCustomizer() {
@Override
public void customize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder) {
jacksonObjectMapperBuilder
.deserializerByType(String.class, new StdScalarDeserializer<Object>(String.class) {
@Override
public String deserialize(JsonParser jsonParser, DeserializationContext ctx)
throws IOException {
return StringUtils.trimWhitespace(jsonParser.getValueAsString());
}
});
}
};
}
}
2.测试Controller
package com.wangzs.controller;
import lombok.Getter;
import lombok.Setter;
import org.springframework.web.bind.annotation.*;
/**
* description
*/
@RestController
public class StringTrimController {
@GetMapping("/get")
public String getTest(String id, String name) {
return id + "--" + name;
}
@PostMapping("post")
public String postTest(@RequestBody User user) {
return user.toString();
}
static class User {
@Setter
@Getter
private String id;
@Setter
@Getter
private String name;
@Override
public String toString() {
return "User{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
'}';
}
}
}