完善一些例子
diff --git a/samples/foo/src/main/java/com/supwisdom/leaveschool/foo/controller/FooController.java b/samples/foo/src/main/java/com/supwisdom/leaveschool/foo/controller/FooController.java
index c69a8aa..56e64f7 100644
--- a/samples/foo/src/main/java/com/supwisdom/leaveschool/foo/controller/FooController.java
+++ b/samples/foo/src/main/java/com/supwisdom/leaveschool/foo/controller/FooController.java
@@ -1,9 +1,10 @@
package com.supwisdom.leaveschool.foo.controller;
import com.supwisdom.infras.lang.random.RandomGenerator;
-import com.supwisdom.leaveschool.foo.model.BarException;
+import com.supwisdom.leaveschool.foo.dto.FooPostCommand;
+import com.supwisdom.leaveschool.foo.exception.BarException;
import com.supwisdom.leaveschool.foo.model.Foo;
-import com.supwisdom.leaveschool.foo.model.FooException;
+import com.supwisdom.leaveschool.foo.exception.FooException;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
@@ -40,7 +41,7 @@
* @return
*/
@PostMapping(path = "/model")
- public String model(@Valid @ModelAttribute Foo foo) {
+ public String model(@Valid @ModelAttribute FooPostCommand foo) {
return "foo/model";
}
diff --git a/samples/foo/src/main/java/com/supwisdom/leaveschool/foo/controller/FooRestController.java b/samples/foo/src/main/java/com/supwisdom/leaveschool/foo/controller/FooRestController.java
index b5b8911..c1e3732 100644
--- a/samples/foo/src/main/java/com/supwisdom/leaveschool/foo/controller/FooRestController.java
+++ b/samples/foo/src/main/java/com/supwisdom/leaveschool/foo/controller/FooRestController.java
@@ -1,9 +1,14 @@
package com.supwisdom.leaveschool.foo.controller;
import com.supwisdom.infras.lang.random.RandomGenerator;
-import com.supwisdom.leaveschool.foo.model.BarException;
-import com.supwisdom.leaveschool.foo.model.Foo;
-import com.supwisdom.leaveschool.foo.model.FooException;
+import com.supwisdom.infras.objectmapper.ObjectMapper;
+import com.supwisdom.leaveschool.foo.dto.FooDto;
+import com.supwisdom.leaveschool.foo.dto.FooPostCommand;
+import com.supwisdom.leaveschool.foo.dto.Page;
+import com.supwisdom.leaveschool.foo.exception.BarException;
+import com.supwisdom.leaveschool.foo.exception.FooException;
+import com.supwisdom.leaveschool.foo.repo.FooRepository;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.util.MimeTypeUtils;
import org.springframework.web.bind.annotation.*;
@@ -13,13 +18,18 @@
import java.util.HashMap;
import java.util.Map;
-/**
- * curl -H 'Accept:application/json' 'http://localhost:8080/foo-rest/greeting/abc'
- */
+import static java.util.stream.Collectors.toList;
+
@RestController
@RequestMapping("/foo-rest")
public class FooRestController {
+ @Autowired
+ private FooRepository fooRepository;
+
+ @Autowired
+ private ObjectMapper objectMapper;
+
/**
* curl -i -s -X GET -H 'Accept:application/json' 'http://localhost:8080/foo-rest/greeting/abc'
*
@@ -35,28 +45,29 @@
/**
* good请求:
- * curl -i -s -X POST -H 'Accept=application/json' 'http://localhost:8080/foo-rest/model?name=abc&age=1'
- *
+ * curl -i -s -X POST -H 'Accept:application/json' 'http://localhost:8080/foo-rest/model?name=abc&age=1'
* bad请求:
- * curl -i -s -X POST -H 'Accept=application/json' 'http://localhost:8080/foo-rest/model?name=abc&age=-1'
+ * curl -i -s -X POST -H 'Accept:application/json' 'http://localhost:8080/foo-rest/model?name=abc&age=-1'
*
* @param foo
* @return
*/
@PostMapping(path = "/model", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
- public Foo model(@Valid Foo foo) {
+ public FooPostCommand model(@Valid FooPostCommand foo) {
return foo;
}
/**
- * curl -i -s -X GET -H 'Accept=application/json' 'http://localhost:8080/foo-rest/foo-exception?with-message=1'
- * curl -i -s -X GET -H 'Accept=application/json' 'http://localhost:8080/foo-rest/foo-exception?with-message=0'
+ * curl -i -s -X GET -H 'Accept:application/json' 'http://localhost:8080/foo-rest/foo-exception?with-message=1'
+ * curl -i -s -X GET -H 'Accept:application/json' 'http://localhost:8080/foo-rest/foo-exception?with-message=0'
*
* @return
* @throws FooException
*/
@GetMapping(path = "/foo-exception", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
- public Map<String, Object> exception1(@RequestParam(value = "with-message", required = false, defaultValue = "false") boolean withMessage) throws FooException {
+ public Map<String, Object> exception1(
+ @RequestParam(value = "with-message", required = false, defaultValue = "false") boolean withMessage)
+ throws FooException {
if (withMessage) {
throw new FooException(RandomGenerator.randomStringAlphabetic(10));
} else {
@@ -66,7 +77,7 @@
}
/**
- * curl -i -s -X GET -H 'Accept=application/json' 'http://localhost:8080/foo-rest/bar-exception'
+ * curl -i -s -X GET -H 'Accept:application/json' 'http://localhost:8080/foo-rest/bar-exception'
*
* @return
*/
@@ -79,4 +90,17 @@
}
}
+ /**
+ * curl -i -s -X GET -H 'Accept:application/json' 'http://localhost:8080/foo-rest/all'
+ *
+ * @return
+ */
+ @GetMapping(path = "/all", produces = MimeTypeUtils.APPLICATION_JSON_VALUE)
+ public Page getAll() throws FooException {
+ return new Page(fooRepository.getAll()
+ .stream()
+ .map(f -> objectMapper.map(f, FooDto.class))
+ .collect(toList())
+ );
+ }
}
diff --git a/samples/foo/src/main/java/com/supwisdom/leaveschool/foo/dto/Dto.java b/samples/foo/src/main/java/com/supwisdom/leaveschool/foo/dto/Dto.java
new file mode 100644
index 0000000..bc8ca75
--- /dev/null
+++ b/samples/foo/src/main/java/com/supwisdom/leaveschool/foo/dto/Dto.java
@@ -0,0 +1,6 @@
+package com.supwisdom.leaveschool.foo.dto;
+
+import java.io.Serializable;
+
+public interface Dto extends Serializable {
+}
diff --git a/samples/foo/src/main/java/com/supwisdom/leaveschool/foo/dto/FooDto.java b/samples/foo/src/main/java/com/supwisdom/leaveschool/foo/dto/FooDto.java
new file mode 100644
index 0000000..7bdadb6
--- /dev/null
+++ b/samples/foo/src/main/java/com/supwisdom/leaveschool/foo/dto/FooDto.java
@@ -0,0 +1,23 @@
+package com.supwisdom.leaveschool.foo.dto;
+
+public class FooDto implements Dto {
+
+ private String name;
+ private int age;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getAge() {
+ return age;
+ }
+
+ public void setAge(int age) {
+ this.age = age;
+ }
+}
diff --git a/samples/foo/src/main/java/com/supwisdom/leaveschool/foo/dto/FooPostCommand.java b/samples/foo/src/main/java/com/supwisdom/leaveschool/foo/dto/FooPostCommand.java
new file mode 100644
index 0000000..cbef7b4
--- /dev/null
+++ b/samples/foo/src/main/java/com/supwisdom/leaveschool/foo/dto/FooPostCommand.java
@@ -0,0 +1,31 @@
+package com.supwisdom.leaveschool.foo.dto;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+
+public class FooPostCommand implements Dto {
+
+ @NotNull
+ @NotEmpty
+ private String name;
+
+ @Min(0)
+ private int age;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getAge() {
+ return age;
+ }
+
+ public void setAge(int age) {
+ this.age = age;
+ }
+}
diff --git a/samples/foo/src/main/java/com/supwisdom/leaveschool/foo/dto/Page.java b/samples/foo/src/main/java/com/supwisdom/leaveschool/foo/dto/Page.java
new file mode 100644
index 0000000..3cc46f9
--- /dev/null
+++ b/samples/foo/src/main/java/com/supwisdom/leaveschool/foo/dto/Page.java
@@ -0,0 +1,16 @@
+package com.supwisdom.leaveschool.foo.dto;
+
+import java.util.List;
+
+public class Page implements Dto {
+
+ private List<? extends Dto> data;
+
+ public Page(List<? extends Dto> data) {
+ this.data = data;
+ }
+
+ public List<? extends Dto> getData() {
+ return data;
+ }
+}
diff --git a/samples/foo/src/main/java/com/supwisdom/leaveschool/foo/model/BarException.java b/samples/foo/src/main/java/com/supwisdom/leaveschool/foo/exception/BarException.java
similarity index 90%
rename from samples/foo/src/main/java/com/supwisdom/leaveschool/foo/model/BarException.java
rename to samples/foo/src/main/java/com/supwisdom/leaveschool/foo/exception/BarException.java
index e5b18a1..9aa3b3c 100644
--- a/samples/foo/src/main/java/com/supwisdom/leaveschool/foo/model/BarException.java
+++ b/samples/foo/src/main/java/com/supwisdom/leaveschool/foo/exception/BarException.java
@@ -1,4 +1,4 @@
-package com.supwisdom.leaveschool.foo.model;
+package com.supwisdom.leaveschool.foo.exception;
public class BarException extends Exception {
public BarException() {
diff --git a/samples/foo/src/main/java/com/supwisdom/leaveschool/foo/model/FooException.java b/samples/foo/src/main/java/com/supwisdom/leaveschool/foo/exception/FooException.java
similarity index 89%
rename from samples/foo/src/main/java/com/supwisdom/leaveschool/foo/model/FooException.java
rename to samples/foo/src/main/java/com/supwisdom/leaveschool/foo/exception/FooException.java
index 1b319af..4d4f08d 100644
--- a/samples/foo/src/main/java/com/supwisdom/leaveschool/foo/model/FooException.java
+++ b/samples/foo/src/main/java/com/supwisdom/leaveschool/foo/exception/FooException.java
@@ -1,4 +1,4 @@
-package com.supwisdom.leaveschool.foo.model;
+package com.supwisdom.leaveschool.foo.exception;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;
diff --git a/samples/foo/src/main/java/com/supwisdom/leaveschool/foo/model/Foo.java b/samples/foo/src/main/java/com/supwisdom/leaveschool/foo/model/Foo.java
index f86f7f2..5d4e0e0 100644
--- a/samples/foo/src/main/java/com/supwisdom/leaveschool/foo/model/Foo.java
+++ b/samples/foo/src/main/java/com/supwisdom/leaveschool/foo/model/Foo.java
@@ -1,16 +1,9 @@
package com.supwisdom.leaveschool.foo.model;
-import javax.validation.constraints.Min;
-import javax.validation.constraints.NotEmpty;
-import javax.validation.constraints.NotNull;
-
public class Foo {
- @NotNull
- @NotEmpty
private String name;
- @Min(0)
private int age;
public String getName() {
@@ -28,4 +21,9 @@
public void setAge(int age) {
this.age = age;
}
+
+ public Foo(String name, int age) {
+ this.name = name;
+ this.age = age;
+ }
}
diff --git a/samples/foo/src/main/java/com/supwisdom/leaveschool/foo/repo/FooRepository.java b/samples/foo/src/main/java/com/supwisdom/leaveschool/foo/repo/FooRepository.java
new file mode 100644
index 0000000..5293ecf
--- /dev/null
+++ b/samples/foo/src/main/java/com/supwisdom/leaveschool/foo/repo/FooRepository.java
@@ -0,0 +1,11 @@
+package com.supwisdom.leaveschool.foo.repo;
+
+import com.supwisdom.leaveschool.foo.exception.FooException;
+import com.supwisdom.leaveschool.foo.model.Foo;
+
+import java.util.List;
+
+public interface FooRepository {
+
+ public List<Foo> getAll() throws FooException;
+}
diff --git a/samples/foo/src/main/java/com/supwisdom/leaveschool/foo/repo/FooRepositoryImpl.java b/samples/foo/src/main/java/com/supwisdom/leaveschool/foo/repo/FooRepositoryImpl.java
new file mode 100644
index 0000000..dc174e0
--- /dev/null
+++ b/samples/foo/src/main/java/com/supwisdom/leaveschool/foo/repo/FooRepositoryImpl.java
@@ -0,0 +1,18 @@
+package com.supwisdom.leaveschool.foo.repo;
+
+import com.supwisdom.leaveschool.foo.exception.FooException;
+import com.supwisdom.leaveschool.foo.model.Foo;
+import org.springframework.stereotype.Repository;
+
+import java.util.Arrays;
+import java.util.List;
+
+@Repository
+public class FooRepositoryImpl implements FooRepository {
+
+ @Override
+ public List<Foo> getAll() throws FooException {
+ throw new FooException();
+// return Arrays.asList(new Foo("xiehuibing", 18), new Foo("chenbo", 18), new Foo("liuhongqing", 18));
+ }
+}
diff --git a/samples/foo/src/main/resources/META-INF/spring-configuration-metadata.json b/samples/foo/src/main/resources/META-INF/spring-configuration-metadata.json
deleted file mode 100644
index 1013fc1..0000000
--- a/samples/foo/src/main/resources/META-INF/spring-configuration-metadata.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "groups": [
- {
- "sourceType": "com.supwisdom.leaveschool.foo.mvc.ExceptionErrorProperties",
- "name": "exception.error-map",
- "type": "java.util.Map",
- "description": "Exception class -> error string的映射"
- }
- ]
-}
diff --git a/samples/foo/src/main/resources/application.yaml b/samples/foo/src/main/resources/application.yaml
index b223a45..a2938f6 100644
--- a/samples/foo/src/main/resources/application.yaml
+++ b/samples/foo/src/main/resources/application.yaml
@@ -1,6 +1,8 @@
spring:
application:
name: sample-foo
+ mvc:
+ log-resolved-exception: true
infras:
mvc: