2016-06-26 5 views
-2

これは私が開発したファイルですが、上記の投稿をまだ実装できません。私が間違っているところに私に助言してください。私のコードはpostmanとspringboot tomcatでうまく動作しますが、/ messages urlへの投稿を自動化したいと思います。次のspringbootアプリケーションでhttp:// localhost:8080/markable/messagesに3秒ごとに投稿要求を行いたい

MessageController.java

import java.util.HashSet; 
import javax.servlet.http.HttpServletResponse; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.http.HttpStatus; 
import org.springframework.http.ResponseEntity; 
import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.PathVariable; 
import service.MessageService; 
import model.Message; 

@RestController 
@RequestMapping("/markable") 
public class MessageController { 

    @Autowired 
    MessageService ms; 

    @RequestMapping(value="/messages", method=RequestMethod.POST) 
    public HttpStatus takeInput(@RequestBody Message input) { 
     boolean flag=ms.addMissionId(input.getMissionId()); 
     System.out.println(flag); 

     if(flag) 
      return HttpStatus.CREATED; 
     else 
      return HttpStatus.CONFLICT; 
    } 

    @RequestMapping("/messages/all") 
    public HashSet<Integer> getAll() { 
     return ms.getAll(); 
    } 

    @RequestMapping("/messages/{id}") 
    public int getMissionId(@PathVariable("id") String id) 
    { 
     int inputId = Integer.parseInt(id); 
     return ms.getMissionId(inputId); 
    } 
} 

FixedMessagePoster.java

package poster; 
import model.Message; 
import org.apache.commons.logging.Log; 
import org.springframework.context.annotation.PropertySource; 
import org.springframework.http.converter.StringHttpMessageConverter; 
import org.springframework.scheduling.annotation.Scheduled; 
import org.springframework.stereotype.Component; 
import org.springframework.web.client.HttpClientErrorException; 
import org.springframework.web.client.RestTemplate; 

@Component 
public class FixedRateMessagePoster { 

    Message m; 
    int count=0; 

    @Scheduled(fixedRate=3000) 
    public void doPost() 
    { 
     try { 
      m=new Message(); 
      m.setMissionId(count); 
      count++; 
      int seed = 1000+(int)(Math.random()*(20000-1000) +1); 
      m.setSeed(seed); 

      RestTemplate restTemplate = new RestTemplate(); 
      restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter()); 
      restTemplate.getMessageConverters().add(new StringHttpMessageConverter()); 
      String uri = new String("http://localhost:8080/markable/messages"); 

      restTemplate.postForLocation(uri,m); 

      System.out.println("hello"); 
     } catch (HttpClientErrorException e) { 
      e.printStackTrace(); 
     } 
     catch(Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

MessageService.java

package service; 

import java.util.HashSet; 
import org.springframework.stereotype.Service; 
import org.springframework.web.bind.annotation.RequestBody; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import model.Message; 
import controller.MessageController; 

@Service 
public class MessageService { 

    static HashSet<Integer> missionIds = new HashSet<Integer>(); 

    public HashSet<Integer> getAll(){ 
     return missionIds; 
    } 

    public boolean addMissionId(int missionId) { 
     return missionIds.add(missionId); 
    } 

    public int getMissionId(int id){ 
     if(missionIds.contains(id)) 
      return id; 
     else 
      return -1; 
    } 
} 

のpom.xml

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.example</groupId> 
    <artifactId>demo</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>Markable</name> 
    <description>Spring Boot Application for Markable</description> 

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.3.5.RELEASE</version> 
     <relativePath/> <!-- lookup parent from repository --> 
    </parent> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <java.version>1.8</java.version> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.spring.framework</groupId> 
      <artifactId>gs-scheduling-tasks</artifactId> 
      <version>0.1.0</version> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
      </plugin> 
     </plugins> 
    </build> 
</project> 
+0

ようこそスタックオーバーフロー。残念ながら、あなたのコードは1つの大きなブロックにあるので、読みにくいです。あなたの質問を再フォーマットして分割することができますか?また、私はそこにあなたのメインクラスを見ませんでした。 [最小、完全な例](http://stackoverflow.com/help/mcve)を共有すると、何が起こっているのかを簡単に見ることができます。 –

+0

私の考えは、n秒ごとに投稿リクエストで/ messagesのURLを打つことです... –

答えて

0

本当に奇妙に見えるがいくつかあります。

  1. なぜあなたは春に開始プロジェクトの何かをインポートしていますか?これはまったく意味がありません。
  2. 質問にApplicationクラスがないため、@EnableSchedulingアノテーションを追加したことを再度確認してください。
  3. RestTemplateを通じて自分のアプリで休憩コントローラを呼び出しているのはなぜですか?本質的には、FixedMessagePosterにメッセージサービスを直接注入し、x秒ごとにこれらの呼び出しを追加することができます。
  4. RestTemplateをBean(アプリケーションまたは構成クラスに@Bean)として作成する場合は、すべての呼び出しですべてMessageConverterを追加する必要はありません。
  5. if-elseの周りに中括弧を追加するのは本当に良い方法です。それは可読性を高めます。
  6. Messageをインポートするクラスもありますが、使用されていないクラスもあります。
  7. FixedMessagePosterに投稿しているメッセージは、メソッド内でローカルでのみ使用されるため、このメソッドをローカルでもクラスのメンバーでもないようにすることを強くお勧めします。
  8. 何らかの情報を出力するのに、System.outを使用しないでください。 Spring Bootに組み込まれているロガーを使用してください。 (ヒント:slf4jと使用するフレームワークには依存しません)
  9. 例外処理は理想的ではありません。本当に必要なものだけをtry-catchにラップします。
関連する問題