Skip to content

Commit

Permalink
feat(scaffold): support register converter automatically
Browse files Browse the repository at this point in the history
  • Loading branch information
taccisum committed Jul 9, 2019
1 parent 9e24836 commit b4270b2
Show file tree
Hide file tree
Showing 7 changed files with 100 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -1,9 +1,22 @@
package ${basePackage}.config;

import ${basePackage}.util.ConverterUtils;
import org.springframework.context.annotation.Configuration;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.convert.ConversionService;

@Configuration
public class ApplicationConfiguration {
public class ApplicationConfiguration implements InitializingBean {
@Autowired
private ConversionService conversionService;

@Override
public void afterPropertiesSet() {
ConverterUtils.setConversionService(conversionService);
}
<%
if(['mybatis-plus']){
print(`
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package ${basePackage}.config.web;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.convert.converter.Converter;
import org.springframework.format.FormatterRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.util.Map;

@Configuration
public class ConverterConfigurer implements WebMvcConfigurer {
@Autowired
private ApplicationContext context;

@Override
public void addFormatters(FormatterRegistry registry) {
Map<String, Converter> beans = context.getBeansOfType(Converter.class);
beans.forEach((k, v) -> {
if (v != null) {
registry.addConverter((Converter<?, ?>) v);
}
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import static ${basePackage}.util.ConverterUtils.convert;

@RestController
@RequestMapping("demo")
@Payload
Expand All @@ -19,6 +21,11 @@ public String sayHello() {
return "welcome!";
}

@GetMapping("convert")
public Model convert() {
return convert("welcome!", Model.class);
}

@GetMapping("sys-error")
public void syserror() {
throw new RuntimeException();
Expand All @@ -28,4 +35,9 @@ public void syserror() {
public void bizerror() {
throw new DemoException();
}

@Data
public static class Model {
private String content;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package ${basePackage}.converter;

import ${basePackage}.controller.DemoController;
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;

@Component
public class String2DemoControllerModelConverter implements Converter<String, DemoController.Model> {
@Override
public DemoController.Model convert(String source) {
DemoController.Model target = new DemoController.Model();
target.setContent(source);
return target;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package ${basePackage}.util;

import org.springframework.core.convert.ConversionService;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

public abstract class ConverterUtils {
private static ConversionService conversionService;

public static void setConversionService(ConversionService conversionService) {
ConverterUtils.conversionService = conversionService;
}

public static <FROM, TO> TO convert(FROM from, Class<TO> toClazz) {
return conversionService.convert(from, toClazz);
}

public static <FROM, TO> List<TO> convertAll(List<FROM> fromList, Class<TO> toCls) {
if (fromList == null || fromList.size() == 0) {
return new ArrayList<>();
}

return fromList
.stream()
.map(from -> conversionService.convert(from, toCls)).collect(Collectors.toList());
}
}
3 changes: 3 additions & 0 deletions generators/test/app/index.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@ describe('generate app', () => {
assert.file('foo-service-provider/src/main/java/com/deepexi/foo/controller/Payload.java')
assert.file('foo-service-provider/src/main/java/com/deepexi/foo/config/web/ApplicationErrorAttributes.java')
assert.file('foo-service-provider/src/main/java/com/deepexi/foo/exception/BizErrorResponseStatus.java')
assert.file('foo-service-provider/src/main/java/com/deepexi/foo/config/web/ConverterConfigurer.java')
assert.file('foo-service-provider/src/main/java/com/deepexi/foo/util/ConverterUtils.java')
assert.file('foo-service-provider/pom.xml')
})

Expand Down Expand Up @@ -121,6 +123,7 @@ describe('generate demo', () => {
assert.file('foo-service-provider/src/main/java/com/deepexi/foo/service/DemoService.java')
assert.file('foo-service-provider/src/main/java/com/deepexi/foo/service/impl/DemoServiceImpl.java')
assert.file('foo-service-provider/src/main/java/com/deepexi/foo/exception/DemoException.java')
assert.file('foo-service-provider/src/main/java/com/deepexi/foo/converter/String2DemoControllerModelConverter.java')
});
});

Expand Down

0 comments on commit b4270b2

Please sign in to comment.