Pregunta

Vi un par de otras preguntas de esta naturaleza, pero no se ajustaban al proyecto de ley.

Actualmente estoy tratando de devolver JSON de dos controladores diferentes. En uno de mis controladores, funciona sin ningún problema, pero cuando llego a mi segundo punto final, recibo un error 406 y no puedo entender qué pasa. Aquí está la acción del controlador:

@RequestMapping("/v1/companies/name/{companyName}")
public @ResponseBody ResultsList<CompanyResult> getCompaniesByName(@PathVariable("companyName") String companyName) {

    if (StringUtils.isEmpty(companyName)) {
        throw new HttpMessageNotReadableException("blah");
    }

    ResultsList<CompanyResult> results = companySearchService.getCompaniesByName(companyName);

    return results;
}

Aquí está el modelo que estoy intentando regresar:

public class ResultsList<T> {
    @XmlElement(name = "results")
    private ArrayList<T> results;

    public int resultCount() {
        return this.results.size();
    }

    public void addResult(T result) {
        this.results.add(result);
    }

    public ResultsList() {
        this.results = new ArrayList<T>();
    }
}

Como puede ver en el código del controlador, mi lista de resultados está compuesta por objetos de compañía de compañía:

public class CompanyResult implements ICompany {
    @XmlElement(name = "companyName")
    private String companyName;

    @XmlElement(name = "symbol")
    private String symbol;

    @XmlElement(name = "city")
    private String city;

    @XmlElement(name = "state")
    private String state;
......

Por lo tanto, mi controlador devuelve una lista de resultados @RequestBody, que se anota con @XMLelement, y los objetos contenidos en la lista también se anotan con @XMLELEMENT. Esto es lo que tenía que hacer para que el otro escenario funcione. Pero este falla. puede alguien decirme por que?

¿Fue útil?

Solución 2

public class ResultsList<T> {
    private List<T> mResults;

    @JsonGetter("results")
    public final List<T> getResults() {
        return mResults;
    }

}

Otros consejos

De acuerdo a la lista de códigos de respuesta HTTP 406 (no aceptable) significa

El recurso solicitado solo es capaz de generar contenido no aceptable de acuerdo con los encabezados de aceptación enviados en la solicitud.

Por lo tanto, probablemente no haya establecido el encabezado de aceptación para permitir que XML sea aceptable. Por lo general, JavaScript espera JSON por defecto. Por lo tanto, para establecer el encabezado Aceptar, use algo como lo siguiente:

function getCompany() {
 var client = new XMLHttpRequest();
 client.open("GET", "/v1/companies/name/exampleCompany");
 client.setRequestHeader("Accept", "application/xml");
 client.send();
}

Alternativamente, puede configurar su servicio web para producir aplicaciones/JSON.

Cerciorarse <mvc:annotation-driven> está en el contexto MVC de primavera. Este error ocurre cuando Spring MVC no reconoce @ResponseBody (no tiene HTTPMessageConverter registrada (s)) y, por lo tanto, intenta convertir el objeto de resultado en Old Fashion ModelandView.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top