0

I'm using the latest Springframework, and having issues trying to GET an int from my server. All code was writen in Java.

When I interact with the server throught browser everything is OK. And when interacting with the server through the client I'm getting a NullPointerException.

Keep in mind I am a beginner software student.

Server Code (I tried both, works fine when using browser):

public class RestController {

    private GameSession gameSession = new GameSession();

    @RequestMapping(value = "registerPlayer")
    public int registerPlayer(@RequestParam("name") String name, @RequestParam("mode") boolean mode) {
        return gameSession.registerPlayer(name, mode);
    }

    @RequestMapping(value = "registerPlayer/{name}/{mode}")
    public int registerPlayer(@PathVariable String name, @PathVariable boolean mode) {
        return gameSession.registerPlayer(name, mode);
    }

}

Client Code (again tried both, with the same result):

@Component
public class GameSessionClient implements ISeaBattleGame{

    @Autowired
    private RestOperations restOperations;
    private String url;

    @Override
    public int registerPlayer(String name, boolean singlePlayerMode) {
        url = "http://localhost:8080/" + "registerPlayer?name=" + name + "&mode=" + (singlePlayerMode ? 1 : 0);
        return restOperations.getForObject(url, int.class);
    }

    @Override
    public int registerPlayer(String name, boolean singlePlayerMode) {
        url = "http://localhost:8080/" + "registerPlayer/" + name + "/" + (singlePlayerMode ? 1 : 0);
        return restOperations.getForObject(url, int.class);
    }
}

RestConfig Code:

@Configuration
public class RestConfig {

    @Bean
    public RestOperations createRestTemplate(final ClientHttpRequestFactory clientHttpRequestFactory){
        return new RestTemplate(clientHttpRequestFactory);
    }

    @Bean
    public ClientHttpRequestFactory clientHttpRequestFactory(@Value("${connect.timeout}") final int connectTimeout, @Value("${read.timeout}") final int readTimeout){
        HttpComponentsClientHttpRequestFactory httpComponentsClientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory();
        httpComponentsClientHttpRequestFactory.setReadTimeout(readTimeout);
        httpComponentsClientHttpRequestFactory.setConnectTimeout(connectTimeout);
        return httpComponentsClientHttpRequestFactory;
    }
}

App Code:

@SpringBootApplication
public class App implements CommandLineRunner {

    private static final Logger logger = LoggerFactory.getLogger(Application.class);

    @Autowired
    private GameSessionClient gameSessionClient;

    public static void main(String[] args){
        SpringApplication.run(Application.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        int playerNr = gameSessionClient.registerPlayer("test", true);
        logger.info("Response: {}", playerNr);
    }
}

The return restOperations.getForObject(url, int.class); results in a java.lang.NullPointerException

url: http://localhost:8080/registerPlayer/test/1 or http://localhost:8080/registerPlayer?name=test&mode=1 both result in 1 when using my browser

Any help would be much appreciated, as I'm getting pretty confused from this.

1 Answers1

0

Update you code to below..will remove the NullPointer Exception your getting:

@Bean
    public RestOperations restOperations(final ClientHttpRequestFactory clientHttpRequestFactory){
        return new RestTemplate(clientHttpRequestFactory);
    }

and do this , instead of "Application.class":

public static void main(String[] args){
    SpringApplication.run(App.class, args);
}
Jeryl Cook
  • 989
  • 17
  • 40