gpt4 book ai didi

rest - REST 应用程序的 RequestBody

转载 作者:行者123 更新时间:2023-12-04 10:42:41 26 4
gpt4 key购买 nike

我对 SpringMVC REST 概念有点陌生。需要专家的帮助来理解/解决以下问题,
我开发了一个 SpringMVC 应用程序,以下是 Controller 类代码的一部分,它可以正常工作,这意味着它可以与 JSON 类型对象一起工作,

@RequestMapping(method = RequestMethod.POST, value = "/user/register")
public ModelAndView addUser( @RequestBody String payload) {

try{

ObjectMapper mapper = new ObjectMapper();
CreateNewUserRequest request = mapper.readValue(payload, CreateNewUserRequest.class);

UserBusiness userBusiness = UserBusinessImpl.getInstance();
CreateNewUserResponse response = userBusiness.createNewUser(request);


return new ModelAndView(ControllerConstant.JASON_VIEW_RESOLVER, "RESPONSE", response);

这是我的 rest-servlet.xml 看起来像
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />

<bean id="jsonViewResolver" class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
<bean id="viewResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver" />


<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="jsonConverter" />
</list>
</property>
</bean>

<bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="supportedMediaTypes" value="application/json" />
</bean>

<bean name="UserController" class="com.tap.mvp.controller.UserController"/>

我的问题是如何使它适用于普通的 POST 请求,我的 Controller 不应该接受 JSON 类型的对象,而应该适用于普通的 HTTP POST 变量。
我如何从请求中获取值?为此我需要做哪些修改。我需要摆脱
ObjectMapper mapper = new ObjectMapper();
CreateNewUserRequest request = mapper.readValue(payload, CreateNewUserRequest.class);

而是需要添加方法来创建一个实例

CreateNewUserRequest



类,通过调用其构造函数。为此,我需要从请求中获取值。我怎么做?我可以治疗吗 @RequestBody 字符串有效载荷 作为 map 并获取值?或者是否有特定的方法可以从 HTTP POST 方法的请求中获取值?以下值将在请求中,

firstName, lastName, email,password

最佳答案

你在这里混合了两个概念。 Spring MVC 中的 REST 服务更加优雅,因为 Spring 为您处理 JSON/XML 编码:

@RequestMapping(
headers = {"content-type=application/json"},
method = RequestMethod.POST, value = "/user/register")
@ResponseBody
public CreateNewUserResponse addUser( @RequestBody CreateNewUserRequest request) {
UserBusiness userBusiness = UserBusinessImpl.getInstance();
return userBusiness.createNewUser(request);
}

请注意 @ResponseBody注解。您不需要任何 View 解析器和手动 JSON 编码。您可以免费获得 XML(通过 JAXB)。

然而,通过表单 POST 发送的数据是非常不同的。我建议创建第二个映射处理不同的媒体类型:
@RequestMapping(
headers = {"content-type=application/x-www-form-urlencoded"},
method = RequestMethod.POST, value = "/user/register")
public ModelAndView addUser(@RequestParam("formParam1") String formParam1) {
//...
}

使用此配置 REST 调用 Content-type=application/json将被路由到第一个方法并形成对第二个方法的 POST 请求(至少在理论上,还没有尝试过)。请注意,与原始 @RequestParam 相比,Spring 中处理表单数据的方法更简单。注释,见: Pass a request parameter in Spring MVC 3 .

关于rest - REST 应用程序的 RequestBody,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8808030/

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