diff --git a/pom.xml b/pom.xml
index 5bce9f2..8fa957d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
org.springframework
- gs-rest-service
+ springboot-protobuf
0.1.0
@@ -18,7 +18,11 @@
UTF-8
UTF-8
- 3.2.0
+
+
+
+
+ 3.4.0
1.4
1.8
@@ -65,6 +69,25 @@
test
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -72,7 +95,7 @@
kr.motd.maven
os-maven-plugin
- 1.3.0.Final
+ 1.5.0.Final
@@ -96,7 +119,7 @@
- com.google.protobuf:protoc:3.0.0:exe:${os.detected.classifier}
+ com.google.protobuf:protoc:${protobuf.version}:exe:${os.detected.classifier}
diff --git a/src/main/java/com/mycompany/demo/App.java b/src/main/java/com/mycompany/demo/App.java
index c3a5016..c2fa868 100644
--- a/src/main/java/com/mycompany/demo/App.java
+++ b/src/main/java/com/mycompany/demo/App.java
@@ -4,6 +4,9 @@
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.http.converter.protobuf.ProtobufHttpMessageConverter;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.Arrays;
/**
* This example demonstrates serving up REST payloads encoded using Google Protocol Buffers.
@@ -20,8 +23,4 @@ ProtobufHttpMessageConverter protobufHttpMessageConverter() {
return new ProtobufHttpMessageConverter();
}
- @Bean
- PlayerRepository playerRepository() {
- return new PlayerRepositoryDemoImpl();
- }
}
diff --git a/src/main/java/com/mycompany/demo/HttpController.java b/src/main/java/com/mycompany/demo/HttpController.java
new file mode 100644
index 0000000..73d96f1
--- /dev/null
+++ b/src/main/java/com/mycompany/demo/HttpController.java
@@ -0,0 +1,69 @@
+package com.mycompany.demo;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.*;
+
+
+@RestController
+public class HttpController {
+
+ @Autowired
+ private PlayerRepository playerRepository;
+ @Autowired
+ private ImageRepository imageRepository;
+
+ /**
+ * {@code curl -v http://localhost:8080/players/1}
+ */
+ @GetMapping("/players/{id}")
+ PlayerProtos.Player player(@PathVariable Integer id) {
+ return playerRepository.findById(id);
+ }
+
+ /**
+ * {@code curl -v http://localhost:8080/players}
+ */
+ @GetMapping("/players")
+ @ResponseBody
+ PlayerProtos.PlayerList findAll() {
+ return playerRepository.findAll();
+ }
+
+ @PostMapping("/uploadImg")
+ void uploadImg(HttpServletRequest request) {
+ try {
+ ImageTest.Data data = ImageTest.Data.parseFrom(request.getInputStream());
+ imageRepository.uploadImage(data);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @PostMapping("/addPlayer")
+ String addPlayer(HttpServletRequest request) {
+ try {
+ PlayerProtos.Player player = PlayerProtos.Player.parseFrom(request.getInputStream());
+ System.out.println(player);
+ System.out.println(player.getFullName());
+ return player.getFullName();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ /**
+ * 使用httpclient测试,需要设置content-Type
+ * httppost.addHeader("Content-Type", "application/x-protobuf;charset=utf-8");
+ * @param player
+ */
+ @PostMapping(value = "/addPlayer1")
+// @PostMapping(value = "/addPlayer1", consumes = {"application/x-protobuf"}, produces = "application/x-protobuf")
+ void addPlayer1(@RequestBody PlayerProtos.Player player) {
+ System.out.println(player.getFullName());
+ }
+}
diff --git a/src/main/java/com/mycompany/demo/ImageRepository.java b/src/main/java/com/mycompany/demo/ImageRepository.java
new file mode 100644
index 0000000..43b155a
--- /dev/null
+++ b/src/main/java/com/mycompany/demo/ImageRepository.java
@@ -0,0 +1,9 @@
+package com.mycompany.demo;
+
+/**
+ * Created by hfy on 2017/11/17.
+ */
+public interface ImageRepository {
+
+ void uploadImage(ImageTest.Data data);
+}
diff --git a/src/main/java/com/mycompany/demo/ImageRepositoryImpl.java b/src/main/java/com/mycompany/demo/ImageRepositoryImpl.java
new file mode 100644
index 0000000..160320b
--- /dev/null
+++ b/src/main/java/com/mycompany/demo/ImageRepositoryImpl.java
@@ -0,0 +1,59 @@
+package com.mycompany.demo;
+
+import com.google.protobuf.ByteString;
+import org.springframework.stereotype.Service;
+
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+/**
+ * Created by hfy on 2017/11/17.
+ */
+@Service
+public class ImageRepositoryImpl implements ImageRepository {
+
+ @Override
+ public void uploadImage(ImageTest.Data data) {
+ ByteString photoData = data.getPhotoData();
+ if (photoData != null) {
+ byte[] bytes = photoData.toByteArray();
+ System.out.println(data.getName());
+ System.out.println(bytes.length);
+// for (byte b : bytes) {
+// System.out.println(b);
+// }
+ writeToFile(bytes, data.getName());
+ }
+ }
+
+
+ private void writeToFile(byte[] bytes, String name) {
+ String path = "d:/" + name + ".jpg";
+ BufferedOutputStream outputStream = null;
+ try {
+ File newFile = new File(path);
+ if (newFile.exists()) {
+ boolean delete = newFile.delete();
+ if (!delete) {
+ System.out.println("删除文件失败!");
+ }
+ }
+ outputStream = new BufferedOutputStream(new FileOutputStream(newFile));
+ outputStream.write(bytes);
+ outputStream.flush();
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ if (null != outputStream) {
+ try {
+ outputStream.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+}
diff --git a/src/main/java/com/mycompany/demo/PlayerRepositoryDemoImpl.java b/src/main/java/com/mycompany/demo/PlayerRepositoryDemoImpl.java
index 39ce893..786e572 100644
--- a/src/main/java/com/mycompany/demo/PlayerRepositoryDemoImpl.java
+++ b/src/main/java/com/mycompany/demo/PlayerRepositoryDemoImpl.java
@@ -1,10 +1,13 @@
package com.mycompany.demo;
+import org.springframework.stereotype.Service;
+
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import static java.util.Arrays.asList;
+@Service
public class PlayerRepositoryDemoImpl implements PlayerRepository {
Map players = new ConcurrentHashMap<>();
diff --git a/src/main/java/com/mycompany/demo/PlayerRestController.java b/src/main/java/com/mycompany/demo/PlayerRestController.java
deleted file mode 100644
index b54830b..0000000
--- a/src/main/java/com/mycompany/demo/PlayerRestController.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.mycompany.demo;
-
-import lombok.RequiredArgsConstructor;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RestController;
-
-
-@RestController
-@RequiredArgsConstructor
-class PlayerRestController {
-
- private final PlayerRepository playerRepository;
-
- /**
- * {@code curl -v http://localhost:8080/players/1}
- */
- @GetMapping("/players/{id}")
- PlayerProtos.Player player(@PathVariable Integer id) {
- return this.playerRepository.findById(id);
- }
-
- /**
- * {@code curl -v http://localhost:8080/players}
- */
- @GetMapping("/players")
- PlayerProtos.PlayerList findAll() {
- return this.playerRepository.findAll();
- }
-}
diff --git a/src/main/proto/imagetest.proto b/src/main/proto/imagetest.proto
new file mode 100644
index 0000000..b5d88dc
--- /dev/null
+++ b/src/main/proto/imagetest.proto
@@ -0,0 +1,11 @@
+syntax = "proto3";
+
+package com.mycompany.demo;
+option java_package = "com.mycompany.demo";
+option java_outer_classname = "ImageTest";
+
+
+message Data {
+ string name = 1;
+ bytes photoData = 2;
+}
\ No newline at end of file
diff --git a/src/test/java/com/mycompany/demo/AppTest.java b/src/test/java/com/mycompany/demo/AppTest.java
index 78f67d8..ed96164 100644
--- a/src/test/java/com/mycompany/demo/AppTest.java
+++ b/src/test/java/com/mycompany/demo/AppTest.java
@@ -1,5 +1,6 @@
package com.mycompany.demo;
+import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
@@ -8,6 +9,8 @@
import org.springframework.http.ResponseEntity;
import org.springframework.test.context.junit4.SpringRunner;
+import java.io.IOException;
+
import static org.assertj.core.api.Assertions.assertThat;
@RunWith(SpringRunner.class)
@@ -19,11 +22,23 @@ public class AppTest {
@Test
public void contextLoaded() {
-
ResponseEntity playerResponse = restTemplate.getForEntity(
"/players/2", PlayerProtos.Player.class);
System.out.println("player retrieved: " + playerResponse.toString());
assertThat(playerResponse.getBody().getShortName()).isEqualTo("Kohli");
}
+
+ @Test
+ public void testAddPlayer() throws IOException, InterruptedException {
+ PlayerProtos.Player player = PlayerProtos.Player.newBuilder().setFullName("中文测试").build();
+ ResponseEntity stringResponseEntity = restTemplate.postForEntity("/addPlayer", player, String.class);
+ Assert.assertEquals("中文测试", stringResponseEntity.getBody());
+ }
+
+ @Test
+ public void testAddPlayer1() throws IOException, InterruptedException {
+ PlayerProtos.Player player = PlayerProtos.Player.newBuilder().setFullName("中文测试").build();
+ restTemplate.postForEntity("/addPlayer1", player, Void.class);
+ }
}