Domanda Restituisce solo un messaggio stringa dal controller Spring MVC 3


Qualcuno può dirmi come posso restituire il messaggio stringa dal controller?

Se restituisco una stringa da un metodo di controller, allora mvc molla come se fosse un nome di vista jsp.


72
2017-10-06 10:09


origine


risposte:


Annota il tuo metodo nel controller con @ResponseBody:

@RequestMapping(value="/controller", method=GET)
@ResponseBody
public String foo() {
    return "Response!";
}

A partire dal: 15.3.2.6 Mappare il corpo della risposta con il @ResponseBody annotazione:

Il @ResponseBody l'annotazione [...] può essere messa su un metodo e indica che il tipo di ritorno deve essere scritto direttamente nel corpo della risposta HTTP (e non inserito in un modello o interpretato come nome di vista).


154
2017-10-06 10:13



Con Spring 4, se il controller è annotato con @RestController invece di @Controller, non hai bisogno del @ResponseBody annotazione.

Il codice sarebbe

@RestController
public class FooController {

   @RequestMapping(value="/controller", method=GET)
   public String foo() {
      return "Response!";
   }

}

Puoi trovare Javadoc per @RestController  Qui


35
2018-05-22 09:26



Anche se @Tomasz ha assolutamente ragione, c'è un altro modo:

@RequestMapping(value="/controller", method=GET)
public void foo(HttpServletResponse res) {
    try {       
        PrintWriter out = res.getWriter();
        out.println("Hello, world!");
        out.close();
    } catch (IOException ex) { 
        ...
    }
}

ma il primo metodo è preferibile. È possibile utilizzare questo metodo se si desidera restituire la risposta con un tipo di contenuto personalizzato o un tipo binario di restituzione (file, ecc.);


15
2017-10-06 10:21



Questa è solo una nota per coloro che potrebbero trovare questa domanda in seguito, ma non è necessario inserire la risposta per modificare il tipo di contenuto. Ecco un esempio qui sotto per fare proprio questo:

@RequestMapping(method = RequestMethod.GET, value="/controller")
public ResponseEntity<byte[]> displayUploadedFile()
{
  HttpHeaders headers = new HttpHeaders();
  String disposition = INLINE;
  String fileName = "";
  headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);

  //Load your attachment here

  if (Arrays.equals(Constants.HEADER_BYTES_PDF, contentBytes)) {
    headers.setContentType(MediaType.valueOf("application/pdf"));
    fileName += ".pdf";
  }

  if (Arrays.equals(Constants.HEADER_BYTES_TIFF_BIG_ENDIAN, contentBytes)
      || Arrays.equals(Constantsr.HEADER_BYTES_TIFF_LITTLE_ENDIAN, contentBytes)) {
    headers.setContentType(MediaType.valueOf("image/tiff"));
    fileName += ".tif";
  }

  if (Arrays.equals(Constants.HEADER_BYTES_JPEG, contentBytes)) {
    headers.setContentType(MediaType.IMAGE_JPEG);
    fileName += ".jpg";
  }

  //Handle other types if necessary

  headers.add("Content-Disposition", , disposition + ";filename=" + fileName);
  return new ResponseEntity<byte[]>(uploadedBytes, headers, HttpStatus.OK);
}

5
2017-10-06 20:49



Che dire:

PrintWriter out = response.getWriter();
out.println("THE_STRING_TO_SEND_AS_RESPONSE");
return null;

Questo wok per me.


2
2018-01-13 14:30



Per l'output String come text/plain uso:

@RequestMapping(value="/foo", method=RequestMethod.GET, produces="text/plain")
@ResponseBody
public String foo() {
    return "bar";
}

1
2018-01-13 14:36