gpt4 book ai didi

json - Spring Boot Controller 建议 - 如何返回 XML 而不是 JSON?

转载 作者:行者123 更新时间:2023-12-04 14:18:26 31 4
gpt4 key购买 nike

我有一个 Controller 建议类,但我似乎无法让它返回 XML,即使我使用了 @RequestMapping 注释。这是一个精简的示例。

@RestControllerAdvice
public class ControllerAdvice {

@ExceptionHandler(Exception.class)
@RequestMapping(produces = MediaType.APPLICATION_XML_VALUE)
public PriceAvailabilityResponse handleControllerErrorXML(final Exception e){

e.printStackTrace();
System.out.println("Exception Handler functional");

PriceAvailabilityResponse priceAvailabilityResponse = new PriceAvailabilityResponse();
priceAvailabilityResponse.setStatusMessage("Server Error");
priceAvailabilityResponse.setStatusCode(99);

return priceAvailabilityResponse;
}
}

注意如何 @RequestMapping(produces = MediaType.APPLICATION_XML_VALUE)在休息 Controller 中工作以控制响应的形成方式。

这是 PriceAvailabilityResponse 的示例可能来自上述代码块。
    @XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
@JsonInclude(JsonInclude.Include.NON_EMPTY)
@Getter
@Setter
public class PriceAvailabilityResponse {

@JacksonXmlProperty(isAttribute = true, localName = "StatusCode")
@JsonProperty(value = "StatusCode", required = false)
private int statusCode = 0;

@JacksonXmlProperty(isAttribute = true, localName = "StatusMessage")
@JsonProperty(value = "StatusMessage", required = false)
private String statusMessage;
}

下面是抛出错误的示例休息 Controller 方法
@RequestMapping(value = "/error_test", produces = MediaType.APPLICATION_XML_VALUE)
public PriceAvailabilityResponse getPriceResponse() throws Exception{

int x = 1/0;

return null;
}

我已经为这段代码编写了模型,根据访问微服务的端点返回 JSON 和 XML,这是绝对必要的。

不幸的是,当我点击 /error_test路径,我的响应总是以 JSON 格式出现。

enter image description here

如何强制响应为 XML?非常感谢您的时间。

最佳答案

以下方法应该可以解决您的问题

@RestController
public class TestController {

@GetMapping(value = "/throw-exception", produces = MediaType.APPLICATION_XML_VALUE)
public ResponseEntity throwException(){
throw new CustomException("My Exception");
}

}

从异常处理程序返回响应实体并用它指定媒体类型。
@ControllerAdvice
public class GlobalErrorHandler extends ResponseEntityExceptionHandler {

@ExceptionHandler(value = {CustomException.class})
protected ResponseEntity handleInvalidDataException(
RuntimeException ex, WebRequest request) {

PriceAvailabilityResponse priceAvailabilityResponse = new
PriceAvailabilityResponse();
priceAvailabilityResponse.setStatusMessage("Server Error");
priceAvailabilityResponse.setStatusCode(99);

return ResponseEntity.status(HttpStatus.BAD_REQUEST)
.contentType(MediaType.APPLICATION_XML)
.body(priceAvailabilityResponse);
}

}

如果没有,请包含 jackson-dataformat-xml 依赖项
    <dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.9.8</version>
</dependency>

关于json - Spring Boot Controller 建议 - 如何返回 XML 而不是 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57876212/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com