SpringMVC传递json字符串,后台接口通过变量接收

Sping MVC_05_SpringMVC接收和响应json数据 该注解的作用是将Controller的方法返回的对象通过适当的转换器转换为指定的格式后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据。'{"name":"赵云","sex":1,"age":10000,"height":188,"weight":66}'使用该注解后不会再通过视图解析器,而是将数据写入到输入流中,其效果等同于通过response对象输出指定格式的数据。可以将请求体中的JSON字符串绑定到相应的bean上,也可将其绑定到相应的字符串上。 阅读详情

前景介绍

在我们日常开发过程中,前台向后台传递参数一般是json 或者 form表单方式,并且最好统一一种传输方式,不建议json+form混合使用,但是由于form表单在数组结构下拼接比较麻烦,一般都采用的json去传递,后端采用SpringBoot(SpringMVC)一般使用@RequestBody注解去接收数据,但如下情况不太好处理

@RequestMapping("/login")
public String login(String name,String password){
	....
}
复制代码

以上方法如果去接收json对象是无法映射的,由于字段太少封装成对象+@RequestBody又太过于繁琐, 这种情况我们可以使用自定义注解+方法参数解析器去解决这个问题

一.导入相关依赖

框架中是用的hutool工具包,根据自己项目情况使用json序列化工具

<dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.7.6</version>
        </dependency>
复制代码

二.定义注解

通过自定义注解标注在需要做数据映射的参数上

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface JSONParameter {
    @AliasFor("name")
    String value() default "";

    @AliasFor("value")
    String name() default "";

    boolean required() default false;

    String defaultValue() default "";
}


复制代码

三.编写自定义参数解析器

package com.gosun.swd.commom.resolver;

import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.gosun.swd.commom.annotation.JSONParameter;
import com.gosun.swd.commom.exception.Assert;
import org.springframework.core.MethodParameter;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;
import sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl;

import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Type;
import java.util.List;
import java.util.Set;

@Component
public class JSONParameterResolver implements HandlerMethodArgumentResolver {

//    ThreadLocal<JSONObject> paramObject = new ThreadLocal<>();


    @Override
    public boolean supportsParameter(MethodParameter methodParameter) {
        return methodParameter.hasParameterAnnotation(JSONParameter.class);
    }

    @Override
    public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) throws Exception {
        JSONObject jsonObject = getJsonObject();
        Object o = jsonObject.get(methodParameter.getParameterName());
        JSONParameter parameterAnnotation = methodParameter.getParameterAnnotation(JSONParameter.class);
        //判断是否允许为空
        String message = String.format("参数%s不能为空", methodParameter.getParameterName());
        Assert.assertFalse(parameterAnnotation.required() && o == null, message);
        //如果为空设置默认值
        if (o == null) {
            return convertParameter(methodParameter, parameterAnnotation.defaultValue());
        }
        return convertParameter(methodParameter, o);
    }

    private Object convertParameter(MethodParameter methodParameter, Object o) throws ClassNotFoundException, InstantiationException, IllegalAccessException, InvocationTargetException {
        if (methodParameter.getParameterType().getTypeName().equals(List.class.getTypeName()) ||
                methodParameter.getParameterType().getTypeName().equals(Set.class.getTypeName())) {
            Type actualTypeArgument = ((ParameterizedTypeImpl) methodParameter.getGenericParameterType()).getActualTypeArguments()[0];
            return JSONUtil.toList((JSONArray) o, Class.forName(actualTypeArgument.getTypeName()));
        } else {
            return convertParameter(methodParameter, String.valueOf(o));
        }
    }

    private Object convertParameter(MethodParameter methodParameter, String obj) throws InstantiationException, IllegalAccessException, InvocationTargetException {
        Constructor<?>[] constructors = methodParameter.getParameterType().getConstructors();
        for (Constructor<?> constructor : constructors) {
            if (constructor.getParameterCount() == 1 && constructor.getParameters()[0].getParameterizedType().getTypeName().equals(String.class.getTypeName())) {
                return constructor.newInstance(obj);
            }
        }
        return null;
    }

    private JSONObject getJsonObject() throws IOException {
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        BufferedReader streamReader = new BufferedReader(new InputStreamReader(request.getInputStream(), "UTF-8"));
        StringBuilder responseStrBuilder = new StringBuilder();
        String inputStr;
        while ((inputStr = streamReader.readLine()) != null) {
            responseStrBuilder.append(inputStr);
        }
        String jsonStr = responseStrBuilder.toString();
//        if (StringUtils.isEmpty(jsonStr)) {//如果没有参数,表示不是第一次进入
//            return paramObject.get() == null ? new JSONObject() : paramObject.get();
//        }
        JSONObject jsonObject = JSONUtil.parseObj(jsonStr);
//        paramObject.set(jsonObject);
        return jsonObject;
    }
}

复制代码

四.解决二次获取request信息丢失的问题

1.编写过滤器
package com.gosun.swd.commom.resolver;


import org.springframework.stereotype.Component;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

/**
 * @author:
 */
@Component
@WebFilter(filterName = "channelFilter", urlPatterns = {"/*"})
public class ChannelFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
        try {
            ServletRequest requestWrapper = null;
            if (request instanceof HttpServletRequest) {
                requestWrapper = new RequestWrapper((HttpServletRequest) request);
            }
            if (requestWrapper == null) {
                chain.doFilter(request, response);
            } else {
                chain.doFilter(requestWrapper, response);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ServletException e) {
            e.printStackTrace();
        }


    }

    @Override
    public void destroy() {
    }

}
 
复制代码
2.编写构造器
package com.gosun.swd.commom.resolver;

import org.apache.commons.io.IOUtils;

import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.io.*;

/**
 * @author:
 */
public class RequestWrapper extends HttpServletRequestWrapper {
    //参数字节数组
    private byte[] requestBody;
    //Http请求对象
    private HttpServletRequest request;

    public RequestWrapper(HttpServletRequest request) throws IOException {
        super(request);
        this.request = request;
    }

    /**
     * @return
     * @throws IOException
     */
    @Override
    public ServletInputStream getInputStream() throws IOException {
        /**
         * 每次调用此方法时将数据流中的数据读取出来,然后再回填到InputStream之中
         * 解决通过@RequestBody和@RequestParam(POST方式)读取一次后控制器拿不到参数问题
         */
        if (null == this.requestBody) {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            IOUtils.copy(request.getInputStream(), baos);
            this.requestBody = baos.toByteArray();
        }

        final ByteArrayInputStream bais = new ByteArrayInputStream(requestBody);
        return new ServletInputStream() {

            @Override
            public boolean isFinished() {
                return false;
            }

            @Override
            public boolean isReady() {
                return false;
            }

            @Override
            public void setReadListener(ReadListener listener) {

            }

            @Override
            public int read() {
                return bais.read();
            }
        };
    }

    public byte[] getRequestBody() {
        return requestBody;
    }

    @Override
    public BufferedReader getReader() throws IOException {
        return new BufferedReader(new InputStreamReader(this.getInputStream()));
    }
}
复制代码

五.调用实例代码

@RequestMapping("/login")
	public String login(@JSONParameter String name, @JSONParameter String password){
	....
	}

	//包含默认值的参数映射
    @PostMapping(value = "/getEvents", consumes = "application/json")
    public ResultVo<Events> getEvents(@JSONParameter(name = "page", defaultValue = "1") Long page, 
                                      @RequestParam(name = "per_page", defaultValue = "10") Long per_page, 
                                      @JSONParameter String type) {
	....
    }
    
    //字段集合
    @PostMapping(value = "/deleteCarInfo", consumes = "application/json")
    public ResultVo deleteCarInfo(@JSONParameter List<Long> ids) {
	....
    }
复制代码
来源:https://juejin.cn/post/7077811223395303460
腾讯云服务器被攻击,带宽被占满的抗战日记 故事 时间:2021-08-23 地点:腾讯云服务器 事件:服务器内容被黑,修复后某人气不过,开始DDOS,占满服务器的带宽,导致网站访问非常缓慢。 杂记 根据腾讯云后台+宝塔后台,带宽被占满:(小垃圾水管没办法) 部分参考:记一次阿里云服务器ECS流出带宽占满的解决过程 https://blog.youkuaiyun.com/wangzhihao1994/article/details/99563456 首先是在云主机上使用远程连接访问到云主机,安装iftop工具 CentOS . 阅读详情

相关推荐

YOLO与3D点云融合:从原理到实践的多模态3D目标检测指南

最近在实验室和几个研究生聊天,发现一个挺有意思的现象:大家一提到“YOLO+3D点云”这个组合,第一反应往往是“顶会热门”、“发论文利器”,但真上手去复现或者想基于这个方向做点创新时,又常常卡在第一步——感觉每个部分都懂一点,但就是串不起来,不知道从哪开始,也不知道核心的“价值点”到底在哪。 这让我想起几年前刚开始接触这个领域时的自己,也经历过同样的困惑。当时看了很多论文,感觉“3D目标检测”这个方向既酷又难,YOLO负责2D图像里的快速定位,点云提供精确的三维空间信息,听起来是天作之合。但真正把代码跑起来

weixin_34267123的博客 416

spring mvc (七) 接收json数据

接收json数据

cnb_120509的博客 1867

Deepseek:物理神经网络PINN入门教程

物理信息网络(Physics-Informed Neural Networks, PINN)是一种将物理定律(如偏微分方程、守恒定律等)嵌入神经网络训练过程的深度学习方法。其核心思想是通过神经网络同时拟合观测数据并满足物理约束,从而解决传统数值方法难以处理的高维、噪声数据或复杂边界条件问题。

金石软件 9300

SpringMVC获取前端传来的json数据的四种方法(前后端json交互总结)

SpringMVC获取前端传来的json数据的四种方法(前后端json交互总结)适用于SSM,Springboot

我认不到你的博客 8230

Element-UI全面入门与实战技巧

Element-UI 是一套基于 Vue 2.0 的桌面端组件库,由饿了么前端团队开发并维护。它提供了一系列丰富的 UI 组件,旨在帮助开发者快速构建高效、美观的 Vue 应用程序。Element-UI 是一款遵循 Ant Design 设计规范的 Vue UI 库,它涵盖了从按钮、输入框、选择器到表格、标签、进度条等众多常用的界面元素。Element-UI 的组件不仅功能全面,而且易于定制,使得开发者可以快速实现个性化的页面设计。Element-UI 的特点包括:在使用 Element-UI 之前,需要确

全世界的博客 2864

Altera Cyclone4 EP4CE15F17C8核心板硬件设计避坑指南(附AD09工程文件)

本文深入解析Altera Cyclone4 EP4CE15F17C8核心板硬件设计中的关键问题与解决方案,涵盖电源架构优化、信号完整性处理、热设计及生产调试要点。特别提供经过验证的AD09工程文件,帮助开发者规避常见设计陷阱,提升FPGA项目的成功率与可靠性。

weixin_29159441的博客 298

java后台接收json数据

1.以@RequestParam接收 @PostMapping("ccc1") public String ccc1(@RequestParam("name") String name) { return name; } 2.以实体类方式接收 @PostMapping("ccc2") public String getList(@RequestBody TestUser user) { return "success"...

夏夏 5837

AI 辅助代码审查:开启代码质量管控的智能时代

AI辅助代码审查正在改变传统的代码质量管控方式。通过自动化分析、智能反馈和上下文感知,AI不仅提高了代码审查的效率,还提升了代码质量的一致性和可维护性。随着机器学习和深度学习技术的不断发展,未来AI将成为开发者日常工作中强大的助手,进一步推动软件开发向智能化、自动化方向发展。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 3229

Springmvc接收json数据的4种方式

1、以RequestParam接收 前端传来的是json数据不多时:[id:id],可以直接用@RequestParam来获取值 @Autowired private AccomodationService accomodationService; @RequestMapping(value = "/update") @ResponseBody public String updateAttr(@RequestParam ("id") int id) { int res=accomodationS

qq_43842093的博客 5303

鸿蒙接入微信支付 微信H5网页在鸿蒙系统的适配方法(含支付兼容方案) 微信H5适配鸿蒙系统 | ArkWeb识别 | 鸿蒙浏览器UA | 微信支付鸿蒙适配 | 鸿蒙微信判断方式

微信H5网页鸿蒙系统适配指南 针对微信H5网页在鸿蒙系统出现的兼容问题,本文提供完整适配方案。关键点包括: 环境识别:

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1302

部署OpenClaw时设置环境变量提示export: not valid in this context的完整解决方案

OpenClaw环境变量设置错误解决方案 问题概述 在部署OpenClaw时设置环境变量出现"export: not valid in this context"错误,通常由以下原因导致: 在非交互式shell中使用export命令 在命令替换或管道中使用export 脚本文件包含Windows换行符(CRLF) 解决方案 修正脚本执行方式:确保export命令在正确的shell上下文中使用 使用source命令:通过. setup_openclaw.sh或source setup_op

博客 459

SpringMVC中接收后端的JSON

读者按 我相信很多同学在学习SpringMVC的时候,可能思路是通的,但是在实际调试的时候,就会遇到各种各样的问题,有的在按照被人的程序走下去,但是就是运行不出正常的结果,前几天,**我在学习SpringMVC中接收后端JSON数据的时候,程序一直调试不同,报各中各样的问题,因为接收后端的JSON数据的时候,**需要用到AJAX,更是让很多没有学过AJAX的同学觉得很难,可能网上的教程出现一点问题,就会导致整个程序运行不出来,进而无法修改,所以我当时也是面临了很多苦难。 当时我在网上搜了很多知识,但是感觉网

qq_28204711的博客 438

STM32Cube高效开发教程<基础篇>(一)----概述

一、 STM32系列器件和开发工具发展历史声明:本人水平有限,博客可能存在部分错误的地方,请广大读者谅解并向本人反馈错误。本专栏博客参考《STM32Cube高效开发教程(基础篇)》,有意向的读者可以购买正版书籍辅助学习,本书籍由王维波老师、鄢志丹老师、王钊老师倾力打造,书籍内容干货满满。一、 STM32系列器件和开发工具发展历史。

我的博客 1173

后台SpringMVC接收map类型参数

背景:有时候我们可能需要发ajax到后台,并且携带一些参数,如果参数数量少,我们可以直接在后台写参数便可,如果前台提交的是表单,我们可以利用spring mvc提供的封装参数的方法进行接收,但假如是另外一种情况,前台向后台发送ajax请求并且携带很多参数,而后台并没有对应的实体类进行接收又该如何处理,当然很多人可能会想到,根据请求中携带的参数,在后台定义一个实体类,在根据mvc的封装特性接收不就好...

HeJD的博客 6万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

SPRINGMVC和JSON的交互(就是后台解析JSON字符串和向前台传递JSON字符串的过程)

springMVC中和json的交互:主要分为两点,一是传递过来的是json字符串,springMVC会先进行解析,二是传递过来的是key:value那么springMVC可以不进行解析,这里的解析指的是json和java对象之间的转换 java对象:就是实体类的对象 首先先来看一张交互的图:   分析: 1.从这个图中我们可以看出来,前台请求的数据如果是json字符串,我们需要用@Reques...

weixin_45265076的博客 1257

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

SpringMVC参数的传递——接收List数组类型的数据

前言 本文主要是记录SpringMVC中当前台传过来数组的时候,如何把前台传过来的数据封装到Controller层方法的形参中。 在了解下面参数如何传递前先记住两个结论: 当Ajax以application/x-www-form-urlencoded编码格式上传数据,必须使用JSON对象传递数据,后台需要使用@RequestParam 或者HttpServletRequest来接收数据 当Ajax以application/json编码格式上传数据,必须使用JSON字符串传递数据,后台需要使用@Rquest

qq_43842093的博客 7145

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

【Spring】“请求“ 之传递 JSON 数据

JSON 就是一种数据格式,有自己的格式和语法,使用文本表示一个对象或数组的信息,因此 JSON 本质是字符串,主要负责在不同的语言中数据传递和交换。JSON 是一个字符串,其格式非常类似于 JavaScript 对象字面量的格式。基于以上特点,JSON 在 Web 应用程序中被广泛使用,如前后端交互,API 接口数据传输等。框架中已经把该工具包引入了进来,我们可以直接进行使用。开发者能更快的上手而已,但是他的语法本身比较简单,所以也很好学。的转换工具,我们可以直接使用,来完成。没有关系,只是语法类似,

Yeeear的博客 1万+

springMVC 中接收前端传递的对象、数组等数据的方式详解

1.     引言 在springMVC中,controller中方法的参数是自动注入的,在使用注解的方式下,通常有:                   @RequestParam:  取querystring当中的参数                   @PathVariable:     取 在@RequestMapping中定义的占位符中的参数(/test/{id})

palerock的博客 5万+

AJax提交表单数据到后台springmvc接收

第一种方法直接用serialize()方法 function insert(){ $.ajax({ type:"POST", url:"${pageContext.request.contextPath}/order/insert", data : $("#fom").serialize(), ...

weixin_30740581的博客 601

SpringMVC系列之参数传递【前后端参数传递的方式详解】

· spring mvc参数传递的方式有哪些? 一、前端向后台传递参数的方式: 通过 Servlet api 中的 HttpServletRequest对象 基本数据类型 + String类型 Array 数组 Java Bean 对象 List 集合 Map 集合 JSON 格式 二、后台向前端通过request域传递值的方式: Servlet api 中的 HttpServletRequ...

m0_46193073的博客 9386

springMVC接收json数组的三种方式

代码见https://gitee.com/bladeandmaster/freemarkerDemo 1、第一种,后端采用String接收 $("#confirm1").click(function (){ var jsonArr=[{"count":1,"name":"aa"},{"count":2,"name":"bb"}]; $.ajax({ type:...

bladeandmaster88的博客 9693

springMVC中前端将传递数据传递到后端后端的接收方式(转)

转:https://blog.youkuaiyun.com/m0_37601318/article/details/78261144 侯大哥 内容如下: 前提:springmvc可以自动将json数据转化为Java对象,而将对象转化为json数据,必须在配置文件中配置!,需要注解@responseBody,需要json包 在Java中,前端传递数据的方式是&lt;from&gt;标签&lt;input&...

sarida的博客 1万+

前台传递给后台的JSON字符串中的引号 “” 在JAVA后台被转义为 &quot

前台传递给后台的JSON字符串中的引号 “” 在JAVA后台被转义为 &amp;quot1、问题:前台数据,JSON字符串带有引号 “” ,数据被传递到后台,引号被转义为 &amp;quot,后台无法解析。前台数据如下:正常后台数据如下:大部分正常,只有JSON字符串中的“” 被转义为 &amp;quot2、解决:方法一:使用apache的lang包里的方法 String appJson =...

charset_ok的博客 1万+

springboot后台实体类接收参数(json和js对象)

springboot后台接收参数就是springMVC接收参数。普通参数传递就不介绍,本文章主要介绍后台用实体类接收参数。 1.前端传递js对象当做参数 var title="title"; var titlePic="titlePic" var slug="slug"; var tags="tags"; var categories="categories"; //文章内容 var content = testEditor.getMar

ChuXinstyle的博客 9114

Spring MVC 接收前端传递的表单json字符串

Spring MVC 接收前端传递的表单json字符串 初衷 在编写页面表单数据较多,并且很多input来自于循环,没有对应的Pojo类与之映射。 在这种情况下,如果循环不是太多的话可以自己构建一个Pojo对象,然后使用SpringMVC的form标签进行绑定。 但是表单过于复杂后这种方式代码就显得非常臃肿。所以采取在前端页面将表单数据拼接成json字符串,然后传递到controller,

gavin的专栏 7964

Json的前台传递和后台接收

前台:jquery、ajax      后台spring   springmvc 1.传递json对象 前台: $.ajax({ type:"POST", url:"/checkUserName", data:{userName:"李四",age:"25"}, success: function(data){ if("ok" == data.status){ ...

m0_38134261的博客 1517
上一篇: flex布局详解
下一篇: Typora使用教程及Markdown语法
码趣资源网
博客等级 码龄4年 269粉丝 518原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值