Hey les gars: Je suis vraiment bloqué sur celui-ci. J'ai une application Grails qui utilise un service REST. Cela fonctionne très bien pour accéder au service REST, mais le problème est lorsque je veux afficher les résultats dans un GSP. Je reçois l'erreur suivante:Grails erreur Null Pointer Exception accède GSP
errors.GrailsExceptionResolver - NullPointerException occurred when processing request: [GET] /TestAPI/login/index
Stacktrace follows:
java.lang.NullPointerException
at grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter.java:198)
at grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Voici mes questions: 1. Je suis en train d'envoyer la sortie à un autre SGP et non l'indice. 2. J'ai lu la trace de la pile et dans mon projet, j'ai index.gsp dans ce chemin qu'il dit ne pas trouver.
Voici mon code de commande:
package testapi
import org.springframework.http.HttpEntity
import org.springframework.http.HttpHeaders
import org.springframework.http.client.support.HttpAccessor
import org.springframework.web.client.RestTemplate
import org.springframework.http.HttpMethod;
import org.springframework.stereotype.Component;
import groovyx.net.http.*
import java.util.Base64;
import java.util.Map;
//import org.springframework.web.client.RestTemplate;
class LoginController {
def index()
{
String usernm = "xxxxxxxxxx";
String link = "https://xxx.xxx.xxx/oauth2/token";
String passwd = "yyyyyy";
//Base64.encodeBase64(usernm.concat(":".concat(passwd)).getBytes())
Base64.getEncoder().encode(usernm.concat(":".concat(passwd)).getBytes());
String base64UserCreds = new String(Base64.getEncoder().encode(usernm.concat(":".concat(passwd)).getBytes()));
RestTemplate restTemplate = new RestTemplate();
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.add("Authorization","Basic ".concat(base64UserCreds));
HttpEntity<String> request = new HttpEntity<>(requestHeaders);
System.out.println ("URI under Test is: " + String.valueOf(link) + ". \n" + "Please stand by for results ... \n \n ");
System.out.println ("Base 64 encoded string is: " + base64UserCreds);
@SuppressWarnings("rawtypes")
Map result = restTemplate.exchange(link, HttpMethod.POST, request, Map.class).getBody();
String authtype = (String) result.get("tokenType");
String tokenaccess = (String) result.get("accessToken");
//PrintStream testOutput = null;
//testOutput.append(result2);
System.out.println("Access token: " + tokenaccess + "\n");
HttpHeaders requestHeaders2 = new HttpHeaders();
requestHeaders2.add("zzzz-pppp-oauth-scope", "zzz:read-any");
requestHeaders2.add("Authorization","Bearer ".concat(tokenaccess));
HttpEntity<String> request2 = new HttpEntity<>(requestHeaders2);
System.out.println("URI #1 under test: https://xxxx.xxxx.xxxx?expand=reps \n");
String result3 = restTemplate.exchange("https://xxxx.xxxx.xxxx?expand=reps", HttpMethod.GET, request2, String.class).getBody();
[result3]
render(view: "api_test", model:[name: result3])
System.out.println(result3);
}
}
Et voici le gsp:
<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="layout" content="main"/>
<title>AutoTest - API</title>
</head>
<body>
<div class="body">
API Results ${result3}
</div>
</body>
</html>
NOTE: Je n'ai pas un fichier de classe de domaine; Ai-je besoin d'un si oui - s'il vous plaît me conseiller comment le structurer.
Merci.
REMARQUE: l'ajout d'une image de la structure de répertoire du projet:
Essayé 'API Résultats $ {nom } '? –
@tim_yates il lance l'erreur sam. – ironmantis7x
@ ironmantis7x vous n'avez pas besoin d'une classe de domaine pour que le contrôleur affiche gsp. La suggestion de Tim devrait fonctionner. Je suggère de ne pas démarrer l'application de la variable dans le modèle est name: result3 donc cela devrait être $ {name} – Vahid