如何使用ResponseEntity

时间:2017-05-04 19:05:06

标签: spring spring-mvc spring-boot

我有以下方法,每当查询字符串中出现xml参数时,我想返回xml,否则返回json。

@RequestMapping(value="/flight/{number}")
    public ResponseEntity getFlight(@PathVariable("number") String number, 
                            @RequestParam(value="xml",required = false) String xml) {
        try {
            if(flightservice.getFlight(number) != null) {
                if(xml != null) {
                    HttpHeaders responseHeaders = new HttpHeaders();
                    responseHeaders.setContentType(MediaType.APPLICATION_XML);
                    return new ResponseEntity(buildFlightResponse(flightservice.getFlight(number)), responseHeaders, HttpStatus.OK);
                } else {
                    HttpHeaders responseHeaders = new HttpHeaders();
                    responseHeaders.setContentType(MediaType.APPLICATION_JSON);
                    return new ResponseEntity(buildFlightResponse(flightservice.getFlight(number)), HttpStatus.OK);
                }   
            } else {
                return new ResponseEntity(getErrorResponse("404", "Flight with number "+number+" not found"), HttpStatus.NOT_FOUND);
            }
        } catch(Exception ex) {
            return new ResponseEntity(getErrorResponse("400", ex.getMessage()), HttpStatus.BAD_REQUEST);
        }
    }

我已在我的spring boot配置类中将defaultContentType设置为MediaType.APPLICATION_JSON。 问题出在xml部分,即使我将responseHeaders contentType设置为APPLICATION_XML,我也会得到格式不正确的json响应。

有没有办法可以使用if .. else条件返回xml或json。

1 个答案:

答案 0 :(得分:0)

您可能需要在ResponseEntity中返回一个Jaxb对象。当Jaxb出现在classpath中时,spring配置了一个Jaxb HttpMessageConverter。

因此当你返回像

这样的Jaxb对象时
@XmlRootElement
public class MyResponse {

}

Spring将其转换为xml并写为响应。 写两个Class作为你的响应,一个作为Jaxb,一个作为jackson来构建构建并相应地返回ResponseEntity。