gpt4 book ai didi

java - Spring ReST 返回标准

转载 作者:行者123 更新时间:2023-11-30 03:18:14 27 4
gpt4 key购买 nike

我目前正在使用 spring 构建 ReST 服务。

我现在设置的方式是我的所有端点都返回一个带有关联状态代码的 ResponseEntity 以及与请求关联的任何 POJO。

GET 请求可能看起来像这样

@RequestMapping( value="{id}", method = RequestMethod.GET)
public ResponseEntity<?> getFoo( @PathVariable(value="id") Long id )
{
LOG.info("Getting Foo by ID: " + id);
Foo foo = fooQuery.getFoo( id );

if( foo != null )
return new ResponseEntity<Foo>( foo, HttpStatus.OK );
else
return new ResponseEntity<Void>( HttpStatus.NOT_FOUND );
}

只是想知道这是否正确,或者是否还有我应该遵循的其他标准。

最佳答案

我发现抛出异常更简单,并使用 @ControllerAdvice 类来处理所有异常。例如,这是我编写代码的一种方式:

@GetMapping(value="{id}")
public Foo getFoo( @PathVariable(value="id") Long id )
{
LOG.info("Getting Foo by ID: " + id);

Foo foo = fooQuery.getFoo( id );
MyUtil.validate(foo != null, "errorMessageCode");

... process foo
return foo;
}

MyUtil.validate 将检查条件并抛出异常,例如 MyException。然后,我会有一个 @ControllerAdvice 类:

@ControllerAdvice
public class DefaultExceptionHandler {

@RequestMapping(produces = "application/json")
@ExceptionHandler(MyException.class)
@ResponseStatus(value = HttpStatus.BAD_REQUEST)
public @ResponseBody Map<String, Object>
handleMyException(MyException ex) {

return MyUtil.mapOf("exception", "MyException",
"message", ex.getMessage());
}

如果 fooQuery.getFoo 将返回 Java 8 可选(如 Spring Data Repositories 的情况),我们还可以使用此构造来引发异常:

Foo foo = fooQuery.getFoo(id).orElseThrow(() ->
new MyException("messageCode");

如果有帮助,here是一篇关于如何使用 @ControllerAdvice 和其他替代方案处理异常的好文章。

(上面实际上是 an open source project 中使用的模式的简单版本。)

关于java - Spring ReST 返回标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31995034/

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