【问题标题】:How to send json to mvc controller?如何将 json 发送到 mvc 控制器?
【发布时间】:2016-09-07 22:44:12
【问题描述】:

我需要向返回 ModelAndView 对象的 MVC 控制器发送 JSON 字符串,但我不知道如何在没有 AJAX 的情况下发送 json,如果我使用 AJAX 发送 json,ModelAndView 不会重定向我。

我的解决方案之一是通过 URL 参数发送 json,但我不喜欢在浏览器中看到所有 JSON。

这是我的 JS 代码:

                $('#btnDetalleActivo')
                        .on('click',function() {
                            var data = $('#tablaActivo').bootstrapTable('getSelections')[0].dto;

                                    if (!$.isEmptyObject(data)) {
                                        $(location)
                                                .attr({'href' : "/AT/DetalleActivo",
                                                        data : data});

                                    } else {
                                        swal.info("Debe seleccionar un activo")
                                    }
                                });

这是控制器的代码:

    @RequestMapping(value = { "DetalleActivo" }, method = { RequestMethod.GET })
public ModelAndView getDetalleActivo(@RequestParam Activo activo, HttpServletRequest request) {

ModelAndView modelAndView = null;
ParamProcedureConsultaBean paramProcedureConsulta = new ParamProcedureConsultaBean();

DetalleActivoWrapper wrapperDetalleActivo;

paramProcedureConsulta.setPivIFGD(activo.getIFGD());
paramProcedureConsulta.setPivTABLA("F01");
paramProcedureConsulta.setPivPERIODO(activo.getFECHAREPORTING());
paramProcedureConsulta.setPivIdMovimiento(activo.getIDMOVIMIENTO());
paramProcedureConsulta.setPivENTIDAD(activo.getENTIDADINM());
paramProcedureConsulta.setPivMACRO(activo.getMCRO());
paramProcedureConsulta.setPivDEPENDENCIA(activo.getDCIA());
paramProcedureConsulta.setPivCUENTA(activo.getNCTA());
paramProcedureConsulta.setPivIdPARTIC(activo.getNNIF());

DetalleActivoBean detalleActivoBean = detalleActivoService.getDetalleActivo(paramProcedureConsulta);

if (detalleActivoBean.getRespuesta().getCODRETORNO() == 0) {
    wrapperDetalleActivo = new DetalleActivoWrapper(detalleActivoBean.getResultado().getDetalleActivo());
    modelAndView = new ModelAndView("ArbolApp/Activos/DetalleActivos", "detalleActivo", wrapperDetalleActivo);
} else {
    modelAndView = new ModelAndView("ArbolApp/ArbolIndex", "mensajeError",
        detalleActivoBean.getRespuesta().getMSGERROR());
}

return modelAndView;
}

希望你能听懂我的英语!

【问题讨论】:

  • 使用 jquery.get 链接:api.jquery.com/jquery.get
  • 首先您需要发送 json 并在代码注释中我看到 ajax 请求类型为“POST”,而您的控制器装饰有 GET,尝试将 method = { RequestMethod.GET }) 更改为 POST 并取消注释 ajax打电话
  • 我不能使用 Ajax 进行调用,因为 Spring MVC 不会将我重定向到视图,我在问题中告诉它。我需要通过另一种方式拨打电话,例如 href。

标签: javascript java json ajax spring-mvc


【解决方案1】:

你可以试试这个,在你的 pom.xml 添加依赖:

<!-- Need this for json to/from object -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.6.3</version>
</dependency>

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.6.3</version>
</dependency>

然后您可以发送任何 JSON 对象,它们将自动转换为 Java 对象,只需确保 Java 类变量与 JSON 对象的字段名称相同,如果这是您的 JSON 对象。

{field1: "value1", field2: "value2"}

那么你应该像java类一样,

public class Test{ String field1, field2;}

并将它们接收为,

@RequestMapping(value="/someMethod", method=RequestMethod.POST)
public ModelAndView someMethod(@RequestBody Test test) {

    //your code
}

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2012-09-09
    • 1970-01-01
    • 2018-11-26
    • 1970-01-01
    • 2012-01-29
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    • 2017-04-25
    相关资源
    最近更新 更多