Spring 4 RestController - 如何使用ResponseEntity返回jaxb对象

时间:2014-01-31 10:57:41

标签: spring rest jaxb

我使用Spring @RESTController作为我的REST Web服务。而不是返回ModelAndView的对象我试图在我的rest方法中返回ResponseEntity对象的对象。对于Strgin类型的响应,当我使用Jaxbobject构建ResponseEntity时它正在工作,它给了我HTTP错误406

@RestController
@RequestMapping(value="/service")
public class MyController {
    public @ResponseBody ResponseEntity<String> getDashBoardData() throws JAXBException {
    // Some Operation
        return new ResponseEntity<String>(myStringXML, responseHeaders, HttpStatus.OK);
    }
}

以下无效

    @RestController
@RequestMapping(value="/service")
public class MyController {
    public @ResponseBody ResponseEntity<MyJaxbClass> getDashBoardData() throws JAXBException {
    // Some Operation
        return new ResponseEntity<MyJaxbClass>(MyJaxbClassObject, HttpStatus.OK);
    }
}

1 个答案:

答案 0 :(得分:3)

@RestController注释已经暗示了所有请求处理方法的@ResponseBody注释,这是其目的之一(它可以避免将所有这些注释放在那里)。所以你可以/应该删除它。

处理方法的返回值由'HandlerMethodReturnValueHandler and the specific one which should handle this delegates to a HttpMessageConverter . It selects a specific HttpMessageConverter based on the requested/supported response types for the current request and the support response types from the HandlerMethodReturnValueHandler`完成。

通常,在使用@EnableWebMvc<mvc:annotation-driven />时,应自动设置所有内容。自动设置会检测哪些库可用(jaxb,json等)。

根据响应代码(406),您在服务器端手动配置了错误,或者客户端不支持xml作为响应类型。