创建 Java Spring 引导端点以获取对象列表 json
Creating Java Spring Boot endpoint to obtain list of objects as json
我正在尝试创建一个端点,该端点 returns 对象列表作为 JSON。
当前对象结构如下:
units: [
{
id: #,
order: #,
name: ""
concepts: [
{
id: #
name: ""
},
...
]
},
...
]
具有 4 个属性的单位列表,其中一个是另一个具有 2 个其他属性的对象列表。这就是我想要获得的结果。
我目前正在尝试在 UnitController
中执行以下操作:
@RequestMapping(method = RequestMethod.GET, produces = "application/json; charset=UTF-8")
public @ResponseBody List<Unit> getUnits() {
return unitService.findAll();
}
但每当我 运行 应用程序并尝试 curl localhost:8080/units
时,我什么也得不到。这可能是因为我在控制器中有另一种方法,比如这个:
@RequestMapping("")
public String index(Map<String, Object> model) {
List<Unit> units = unitService.findAll();
model.put("units", units);
return "units/index";
}
有人可以帮助我解决这个问题并告诉我我做错了什么吗?非常感谢。
编辑
好的,所以我将注释移到了 class
@Controller
@RequestMapping(value = "/units", method = RequestMethod.GET, produces = "application/json; charset=UTF-8")
public class UnitController extends BaseController {
...
}
并尝试这样的端点:
@RequestMapping(method = RequestMethod.GET, value = "/units.json")
public @ResponseBody List<Unit> getUnits() {
return unitService.findAll();
}
但是它curl localhost:8080/units.json
仍然没有给我任何反应。
还忘了说我的 application.properties
文件没有 server.contextPath
属性.
这可能是因为控制器上没有 @RequestMapping
注释。 Spring boot 需要映射来确定发送 REST
API 请求时需要调用哪个方法。例如。您需要 UnitController
class 上的以下内容:
@RestController
@RequestMapping(produces = MediaType.APPLICATION_JSON_UTF8_VALUE, value = "/units")
public class UnitController {
如果您的控制器 class 已经有了,那么您需要为方法定义另一个映射,指定请求方法和可选的映射。例如
@RestController
@RequestMapping(produces = MediaType.APPLICATION_JSON_UTF8_VALUE, value = "/units")
public class UnitController {
@RequestMapping(method = RequestMethod.GET)
public List<Unit> method1(){..}
@RequestMapping(method = RequestMethod.POST)
public List<Unit> method2(){..}
@RequestMapping(method = RequestMethod.GET, value = "/unit")
public List<Unit> method3(){..}
}
对于上面的例子:
- 向 /units 发送
GET
请求将导致调用 method1
- 向 /units 发送
POST
请求将导致调用 method2
- 向 /units/unit 发送
GET
请求将导致调用 method3
如果您的 application.properties
文件定义了 server.contextPath
属性,则需要将其附加到 baseurl,例如<host>:<port>/<contextPath>
我正在尝试创建一个端点,该端点 returns 对象列表作为 JSON。
当前对象结构如下:
units: [
{
id: #,
order: #,
name: ""
concepts: [
{
id: #
name: ""
},
...
]
},
...
]
具有 4 个属性的单位列表,其中一个是另一个具有 2 个其他属性的对象列表。这就是我想要获得的结果。
我目前正在尝试在 UnitController
中执行以下操作:
@RequestMapping(method = RequestMethod.GET, produces = "application/json; charset=UTF-8")
public @ResponseBody List<Unit> getUnits() {
return unitService.findAll();
}
但每当我 运行 应用程序并尝试 curl localhost:8080/units
时,我什么也得不到。这可能是因为我在控制器中有另一种方法,比如这个:
@RequestMapping("")
public String index(Map<String, Object> model) {
List<Unit> units = unitService.findAll();
model.put("units", units);
return "units/index";
}
有人可以帮助我解决这个问题并告诉我我做错了什么吗?非常感谢。
编辑
好的,所以我将注释移到了 class
@Controller
@RequestMapping(value = "/units", method = RequestMethod.GET, produces = "application/json; charset=UTF-8")
public class UnitController extends BaseController {
...
}
并尝试这样的端点:
@RequestMapping(method = RequestMethod.GET, value = "/units.json")
public @ResponseBody List<Unit> getUnits() {
return unitService.findAll();
}
但是它curl localhost:8080/units.json
仍然没有给我任何反应。
还忘了说我的 application.properties
文件没有 server.contextPath
属性.
这可能是因为控制器上没有 @RequestMapping
注释。 Spring boot 需要映射来确定发送 REST
API 请求时需要调用哪个方法。例如。您需要 UnitController
class 上的以下内容:
@RestController
@RequestMapping(produces = MediaType.APPLICATION_JSON_UTF8_VALUE, value = "/units")
public class UnitController {
如果您的控制器 class 已经有了,那么您需要为方法定义另一个映射,指定请求方法和可选的映射。例如
@RestController
@RequestMapping(produces = MediaType.APPLICATION_JSON_UTF8_VALUE, value = "/units")
public class UnitController {
@RequestMapping(method = RequestMethod.GET)
public List<Unit> method1(){..}
@RequestMapping(method = RequestMethod.POST)
public List<Unit> method2(){..}
@RequestMapping(method = RequestMethod.GET, value = "/unit")
public List<Unit> method3(){..}
}
对于上面的例子:
- 向 /units 发送
GET
请求将导致调用method1
- 向 /units 发送
POST
请求将导致调用method2
- 向 /units/unit 发送
GET
请求将导致调用method3
如果您的 application.properties
文件定义了 server.contextPath
属性,则需要将其附加到 baseurl,例如<host>:<port>/<contextPath>