原由
由于Java語言偏向于使用駝峰式命名园爷,如columnA浴骂,然而數(shù)據庫(MySQL)表字段一般使用蛇式命名钱磅,如column_a巩踏,且前端一般也是使用數(shù)據庫的字段格式進行交互。因此參數(shù)傳遞和返回就需要對駝峰和蛇式的參數(shù)進行轉化续搀。
解決方案
引入com.fasterxml.jackson.core
包
...
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.11.2</version>
</dependency>
...
返回結果處理
- 配置
# application.properties
spring.jackson.property-naming-strategy=SNAKE_CASE
- 數(shù)據類
...
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class TestDTO implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
private String userName;
private Integer createTime;
}
Tips: JsonInclude
注解可以過濾為null
的數(shù)據
參數(shù)處理
- 注入
ObjectMapper
@RestController
public class TestController {
@Autowired
private ObjectMapper objectMapper;
}
- 數(shù)據轉換
@RestController
public class TestController {
@AutoWired
private TestService testService;
...
@GetMapping("/test")
public void index(@RequestParam Map<String, Object> params) {
TestForm testForm = objectMapper.convertValue(params, TestForm.class);
testService.index(testForm);
}
...
}
- 參數(shù)驗證
...
@Service
@Validated
public class TestServiceImpl implements TestService {
private static final Logger logger = LoggerFactory.getLogger(TestServiceImpl.class);
@AutoWired
private final TestMapper testMapper;
@Override
public List<TestModel> index(@Valid TestForm params) {
List<TestModel> tests = testMapper.selectByParams(params);
return tests;
}
}